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

Last change on this file since 30277 was 29733, checked in by pieren, 12 years ago

Add export raster image in GeoTiff format

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