Revision: 6491 http://sourceforge.net/p/jump-pilot/code/6491 Author: ma15569 Date: 2020-09-17 04:35:01 +0000 (Thu, 17 Sep 2020) Log Message: ----------- Extended save option to tif file
Modified Paths: -------------- core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java Modified: core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java =================================================================== --- core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java 2020-09-17 04:32:14 UTC (rev 6490) +++ core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java 2020-09-17 04:35:01 UTC (rev 6491) @@ -34,37 +34,56 @@ package org.openjump.core.ui.plugin.raster; import java.awt.BasicStroke; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dialog; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Image; +import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; +import java.awt.event.ActionEvent; import java.awt.event.HierarchyEvent; import java.awt.event.HierarchyListener; import java.awt.geom.NoninvertibleTransformException; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.IndexColorModel; import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.File; import java.io.IOException; import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JFileChooser; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import org.openjump.core.CheckOS; +import org.openjump.core.apitools.IOTools; +import org.openjump.core.rasterimage.RasterImageIO; import org.openjump.core.rasterimage.RasterImageLayer; import org.openjump.core.rasterimage.RasterImageLayer.RasterDataNotFoundException; +import org.openjump.core.ui.io.file.FileNameExtensionFilter; +import com.sun.media.jai.codecimpl.util.RasterFactory; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jump.I18N; +import com.vividsolutions.jump.util.FileUtil; +import com.vividsolutions.jump.workbench.JUMPWorkbench; import com.vividsolutions.jump.workbench.WorkbenchContext; import com.vividsolutions.jump.workbench.model.FenceLayerFinder; import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory; import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck; +import com.vividsolutions.jump.workbench.ui.GUIUtil; import com.vividsolutions.jump.workbench.ui.JTablePanel; import com.vividsolutions.jump.workbench.ui.cursortool.RectangleTool; import com.vividsolutions.jump.workbench.ui.images.IconLoader; @@ -185,7 +204,8 @@ DefaultTableModel tableModel = new DefaultTableModel(data, columnNames); final JTablePanel jTablePanel = new JTablePanel(tableModel); - jTablePanel.getCommandPanel().removeAll(); + // jTablePanel.getCommandPanel().removeAll(); + jTablePanel.getAllComponetsExceptTable().removeAll(); jTablePanel.getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF); jTablePanel.getTable().setTableHeader(null); @@ -202,12 +222,127 @@ } } }); + JPanel pan = new JPanel(new BorderLayout()); - - jTablePanel.setPreferredSize(new Dimension(400,300)); - - - JOptionPane.showOptionDialog(null, jTablePanel, I18N.get("org.openjump.core.ui.plugin.raster.RasterQueryPlugIn"), JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE, null, - new Object[]{}, null); + pan.setPreferredSize(new Dimension(400,300)); + pan.add(jTablePanel, BorderLayout.CENTER); + pan.add( savePanel(jTablePanel.getTable()), BorderLayout.SOUTH); + + + JOptionPane.showOptionDialog(null, pan, I18N.get("org.openjump.core.ui.plugin.raster.RasterQueryPlugIn"), JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE, null, + new Object[]{}, null); } + private JPanel savePanel(JTable jTable) { + final JPanel save = new JPanel(); + save.setLayout(new FlowLayout(FlowLayout.RIGHT)); + final JButton saveButton = new JButton( + I18N.get("deejump.plugin.SaveLegendPlugIn.Save")); + saveButton.addActionListener(new java.awt.event.ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + File file = null; + final FileNameExtensionFilter filter2 = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final FileNameExtensionFilter filter3 = new FileNameExtensionFilter( + "Tagged Image Format", "tif"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(); + + fc.setFileFilter(filter3); + fc.setFileFilter(filter2); + fc.addChoosableFileFilter(filter2); + final int returnVal = fc.showSaveDialog(JUMPWorkbench + .getInstance().getFrame()); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter2)) { + file = new File(fc.getSelectedFile() + ".csv"); + FileUtil.addExtensionIfNone(file, "csv"); + IOTools.saveCSV(jTable, file.getAbsolutePath()); + saved(file); + } else if (fc.getFileFilter().equals(filter3)) { + file = new File(fc.getSelectedFile() + ".tif"); + FileUtil.addExtensionIfNone(file, "tif"); + + Envelope envWanted = getRectangle().getEnvelopeInternal(); + Rectangle subset = rLayer.getRectangleFromEnvelope(envWanted); + Raster raster = rLayer.getRasterData(subset); + if (rLayer.getImage().getColorModel() instanceof IndexColorModel) { + IndexColorModel indexColorModel = (IndexColorModel) rLayer + .getImage().getColorModel(); + DataBuffer dataBufferIn = raster.getDataBuffer(); + DataBufferByte dataBufferOut = new DataBufferByte(subset.width + * subset.height * 3, 3); + int index = 0; + int nCells = subset.height * subset.width; + for (int r = 0; r < subset.height; r++) { + for (int c = 0; c < subset.width; c++) { + int value = dataBufferIn.getElem(index); + dataBufferOut.setElem(0, index, + indexColorModel.getRed(value)); + dataBufferOut.setElem(1, index + nCells, + indexColorModel.getGreen(value)); + dataBufferOut.setElem(2, index + nCells * 2, + indexColorModel.getBlue(value)); + index++; + } + } + + int[] bankIndices = new int[3]; + bankIndices[0] = 0; + bankIndices[1] = 1; + bankIndices[2] = 2; + + int[] bandOffsets = new int[3]; + bandOffsets[0] = 0; + bandOffsets[1] = raster.getWidth() * raster.getHeight(); + bandOffsets[2] = 2 * raster.getWidth() * raster.getHeight(); + + WritableRaster wRaster = RasterFactory.createBandedRaster( + dataBufferOut, raster.getWidth(), raster.getHeight(), + raster.getWidth(), bankIndices, bandOffsets, + new Point(0, 0)); + raster = wRaster; + } + + RasterImageIO rasterImageIO = new RasterImageIO(); + + rasterImageIO.writeImage(file , raster, envWanted, + rasterImageIO.new CellSizeXY(rLayer.getMetadata() + .getOriginalCellSize(), rLayer.getMetadata() + .getOriginalCellSize()), rLayer.getMetadata() + .getNoDataValue()); + + saved(file); + + } + + } + + } catch (final Exception ex) { + notsaved(); + } + + } + }); + save.add(saveButton); + return save; + } + + protected void saved(File file) { + JUMPWorkbench.getInstance().getFrame() + .setStatusMessage(sSaved + " :" + file.getAbsolutePath()); + } + + protected void notsaved() { + JUMPWorkbench.getInstance().getFrame().warnUser(SCouldNotSave); + + } + + + + private final String sSaved = I18N + .get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved"); + private final String SCouldNotSave = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result"); + } \ No newline at end of file _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel