source: osm/applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionSaveRasterAs.java@ 33514

Last change on this file since 33514 was 33047, checked in by donvip, 9 years ago

findbugs

File size: 5.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package cadastre_fr;
3
4import static org.openstreetmap.josm.tools.I18n.marktr;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.awt.image.BufferedImage;
9import java.io.File;
10import java.io.IOException;
11import java.util.Locale;
12
13import javax.imageio.ImageIO;
14import javax.swing.JFileChooser;
15import javax.swing.filechooser.FileFilter;
16
17import org.geotools.coverage.grid.GridCoverage2D;
18import org.geotools.coverage.grid.GridCoverageFactory;
19import org.geotools.coverage.grid.io.AbstractGridFormat;
20import org.geotools.gce.geotiff.GeoTiffFormat;
21import org.geotools.gce.geotiff.GeoTiffWriteParams;
22import org.geotools.gce.geotiff.GeoTiffWriter;
23import org.geotools.geometry.Envelope2D;
24import org.geotools.referencing.CRS;
25import org.opengis.parameter.GeneralParameterValue;
26import org.opengis.parameter.ParameterValueGroup;
27import org.openstreetmap.josm.Main;
28import org.openstreetmap.josm.actions.JosmAction;
29
30public class MenuActionSaveRasterAs extends JosmAction {
31
32 public static final String NAME = marktr("Save image as...");
33
34 private static final long serialVersionUID = 1L;
35
36 private WMSLayer wmsLayer;
37
38 public class FiltrePng extends FileFilter {
39 @Override
40 public boolean accept(File file) {
41 if (file.isDirectory()) {
42 return true;
43 }
44 return file.getName().toLowerCase(Locale.ENGLISH).endsWith(".png");
45 }
46
47 @Override
48 public String getDescription() {
49 return tr("PNG files (*.png)");
50 }
51 }
52
53 public class FiltreTiff extends FileFilter {
54 @Override
55 public boolean accept(File file) {
56 if (file.isDirectory()) {
57 return true;
58 }
59 return file.getName().toLowerCase(Locale.ENGLISH).endsWith(".tif");
60 }
61
62 @Override
63 public String getDescription() {
64 return tr("GeoTiff files (*.tif)");
65 }
66 }
67
68 FiltreTiff filtreTiff = new FiltreTiff();
69 FiltrePng filtrePng = new FiltrePng();
70
71 /**
72 * Constructs a new {@code MenuActionSaveRasterAs}.
73 * @param wmsLayer WMS layer
74 */
75 public MenuActionSaveRasterAs(WMSLayer wmsLayer) {
76 super(tr(NAME), "save", tr("Export image (only raster images)"), null, false);
77 this.wmsLayer = wmsLayer;
78 }
79
80 @Override
81 public void actionPerformed(ActionEvent arg0) {
82 File file;
83 JFileChooser fc = new JFileChooser();
84 fc.addChoosableFileFilter(filtreTiff);
85 fc.addChoosableFileFilter(filtrePng);
86 fc.setFileFilter(filtreTiff);
87 int returnVal = fc.showSaveDialog(Main.parent);
88 if (returnVal == JFileChooser.APPROVE_OPTION) {
89 file = fc.getSelectedFile();
90 BufferedImage bi = wmsLayer.getImage(0).image;
91 if (fc.getFileFilter().equals(filtrePng)) {
92 if (!file.getName().endsWith(".png"))
93 file = new File(file.getParent(), file.getName()+".png");
94 try {
95 ImageIO.write(bi, "png", file);
96/*
97 FileOutputStream flux = new FileOutputStream(file);
98 BufferedOutputStream fluxBuf = new BufferedOutputStream(flux);
99 JPEGImageEncoder codec = JPEGCodec.createJPEGEncoder(fluxBuf, JPEGCodec.getDefaultJPEGEncodeParam(bi));
100 codec.encode(bi);
101 fluxBuf.close();
102*/
103 } catch (IOException e) {
104 e.printStackTrace();
105 }
106 } else if (fc.getFileFilter().equals(filtreTiff)) {
107 boolean alpha = bi.getColorModel().hasAlpha();
108 Main.info("image with alpha channel : " + alpha);
109 try {
110 double x = wmsLayer.getImage(0).min.east();
111 double y = wmsLayer.getImage(0).min.north();
112 Envelope2D bbox = new Envelope2D(CRS.decode("EPSG:27561"),
113 x, y,
114 wmsLayer.getImage(0).max.east()-x, wmsLayer.getImage(0).max.north()-y);
115 GridCoverageFactory factory = new GridCoverageFactory();
116 GridCoverage2D coverage = factory.create("tiff", bi, bbox);
117 final File output = new File(file.getParent(), file.getName()+".tif");
118 GeoTiffWriter gtwriter = new GeoTiffWriter(output);
119 GeoTiffWriteParams wp = new GeoTiffWriteParams();
120 wp.setCompressionMode(GeoTiffWriteParams.MODE_EXPLICIT);
121 wp.setCompressionType("LZW");
122 wp.setCompressionQuality(0.75F);
123 final GeoTiffFormat format = new GeoTiffFormat();
124 final ParameterValueGroup params = format.getWriteParameters();
125 params.parameter(
126 AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString())
127 .setValue(wp);
128
129 gtwriter.write(coverage, params.values().toArray(new GeneralParameterValue[1]));
130 gtwriter.dispose();
131 coverage.dispose(true);
132 } catch (Exception e) {
133 Main.error(e);
134 }
135 }
136 }
137 }
138
139}
Note: See TracBrowser for help on using the repository browser.