Revision 21816

View differences:

trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/vectorizacion/GrayConversionPreviewRender.java
18 18
 */
19 19
package org.gvsig.rastertools.vectorizacion;
20 20

  
21
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
21 22
import org.gvsig.gui.beans.imagenavigator.ImageUnavailableException;
22 23
import org.gvsig.raster.beans.previewbase.IPreviewRenderProcess;
24
import org.gvsig.raster.dataset.FileNotOpenException;
25
import org.gvsig.raster.dataset.io.RasterDriverException;
26
import org.gvsig.raster.filter.grayscale.GrayScaleFilter;
27
import org.gvsig.raster.filter.grayscale.GrayScaleManager;
23 28
import org.gvsig.raster.grid.filter.FilterTypeException;
29
import org.gvsig.raster.grid.filter.RasterFilterList;
30
import org.gvsig.raster.grid.filter.RasterFilterListManager;
31
import org.gvsig.raster.grid.filter.enhancement.EnhancementStretchListManager;
32
import org.gvsig.raster.grid.filter.enhancement.LinearStretchParams;
24 33
import org.gvsig.raster.hierarchy.IRasterRendering;
25 34
import org.gvsig.raster.util.RasterToolsUtil;
26 35

  
36
import com.iver.cit.gvsig.fmap.drivers.dgn.double64;
37

  
27 38
/**
28 39
 * Clase para el renderizado de la vista previa en la conversi?n 
29 40
 * a escala de grises.
......
32 43
 */
33 44
public class GrayConversionPreviewRender implements IPreviewRenderProcess  {
34 45

  
35
	private boolean             showPreview = false;
46
	private boolean             showPreview            = false;	
47
	private boolean             posterizationActive    = true;
48
	private boolean             highPassActive         = false;
49
	private boolean             noiseActive            = false;
50
	
51
	private int                 bandType               = GrayScaleFilter.GRAY;
52
	private int                 numberOfLevels         = 2;
53
	private int                 posterizationThreshold = 0;
54
	private int                 radiusHighPass         = 0;
55
	private int                 thresholdNoise         = 0;
56
	private FLyrRasterSE        lyr                    = null;
57
	
58
	/**
59
	 * Constructor. 
60
	 * @param lyr
61
	 */
62
	public GrayConversionPreviewRender(FLyrRasterSE lyr) {
63
		this.lyr = lyr;
64
	}
65
	
36 66
	/*
37 67
	 * (non-Javadoc)
38 68
	 * @see org.gvsig.raster.beans.previewbase.IPreviewRenderProcess#process(org.gvsig.raster.hierarchy.IRasterRendering)
......
40 70
	public void process(IRasterRendering rendering) throws FilterTypeException, ImageUnavailableException {
41 71
		if(!showPreview)
42 72
			throw new ImageUnavailableException(RasterToolsUtil.getText(this, "panel_preview_not_available"));
73
		
74
		if(lyr == null)
75
			throw new ImageUnavailableException(RasterToolsUtil.getText(this, "preview_not_available"));
76
		
77
		RasterFilterList filterList = rendering.getRenderFilterList();
78
		RasterFilterListManager filterManager = new RasterFilterListManager(filterList);
79

  
80
		GrayScaleManager manager = new GrayScaleManager(filterManager);
81
		manager.addGrayScaleFilter(bandType);
82
		
83
		if(posterizationActive) {
84
			EnhancementStretchListManager elm = new EnhancementStretchListManager(filterManager);
85
			LinearStretchParams leParams = new LinearStretchParams();
86
			leParams.rgb = true;
87
			double[] in = new double[(numberOfLevels - 1) * 2 + 4];
88
			int[] out = new int[(numberOfLevels - 1) * 2 + 4];
89
			in[0] = in[1] = out[0] = out[1] = 0;
90
			in[in.length - 1] = in[in.length - 2] = out[out.length - 1] = out[out.length - 2] = 255;
91
			
92
			//Construimos el array de entrada
93
			int nPieces = numberOfLevels -1;
94
			int n = 0;
95
			int increment = 255 / nPieces;
96
			int lastIn = 0;
97
			for (int i = 3; i < in.length - 2; i++) {
98
				if((i % 2) != 0) {
99
					in[i] = Math.round(lastIn + increment);
100
					lastIn = (int)in[i]; 
101
				} else
102
					in[i] = lastIn;
103
				n++;
104
			}
105
			
106
			//Construimos el array de salida
107
			for (int i = 3; i < in.length - 2; i++)
108
				if(i > (out.length / 2))
109
					out[i] = 255;
110
	
111
			leParams.red.stretchIn = in;
112
			leParams.red.stretchOut = out;
113
			leParams.green.stretchIn = in;
114
			leParams.green.stretchOut = out;
115
			leParams.blue.stretchIn = in;
116
			leParams.blue.stretchOut = out;
117
			elm.addEnhancedStretchFilter(leParams, 
118
										lyr.getDataSource().getStatistics(), 
119
										rendering.getRenderBands(), 
120
										false);
121
			
122
		}
123
		
124
		if(highPassActive) {
125
			
126
		}
127
		
128
		if(noiseActive) {
129
			
130
		}
43 131
	}
44 132
	
45 133
	/**
......
62 150
		this.showPreview = showPreview;
63 151
	}
64 152

  
153
	/**
154
	 * Consulta el tipo de banda asignado
155
	 * @return Entero con el tipo de banda. Debe corresponder a una constante
156
	 * definida en la clase GrayScaleFilter
157
	 */
158
	public int getBandType() {
159
		return bandType;
160
	}
161

  
162
	/**
163
	 * Asigna el tipo de banda asignado
164
	 * @param Entero con el tipo de banda. Debe corresponder a una constante
165
	 * definida en la clase GrayScaleFilter
166
	 */
167
	public void setBandType(int bandType) {
168
		this.bandType = bandType;
169
	}
170

  
171
	/**
172
	 * Consulta si est? activo el filtro de paso alto
173
	 * @return true si est? activo y false si no lo est?
174
	 */
175
	public boolean isHighPassActive() {
176
		return highPassActive;
177
	}
178

  
179
	/**
180
	 * Asigna si est? activo el filtro de paso alto
181
	 * @param true si est? activo y false si no lo est?
182
	 */
183
	public void setHighPassActive(boolean highPassActive) {
184
		this.highPassActive = highPassActive;
185
	}
186

  
187
	/**
188
	 * Consulta si est? activo el filtro de ruido
189
	 * @param true si est? activo y false si no lo est?
190
	 */
191
	public boolean isNoiseActive() {
192
		return noiseActive;
193
	}
194

  
195
	/**
196
	 * Asigna si est? activo el filtro de ruido
197
	 * @return true si est? activo y false si no lo est?
198
	 */
199
	public void setNoiseActive(boolean noiseActive) {
200
		this.noiseActive = noiseActive;
201
	}
202

  
203
	/**
204
	 * Consulta si est? activa la posterizaci?n
205
	 * @return true si est? activa y false si no lo est?
206
	 */
207
	public boolean isPosterizationActive() {
208
		return posterizationActive;
209
	}
210

  
211
	/**
212
	 * Asigna si est? activa la posterizaci?n
213
	 * @return true si est? activo y false si no lo est?
214
	 */
215
	public void setPosterizationActive(boolean posterizationActive) {
216
		this.posterizationActive = posterizationActive;
217
	}
218

  
219
	/**
220
	 * Asigna el n?mero de niveles de posterizaci?n
221
	 * @param numberOfLevels
222
	 */
223
	public void setNumberOfLevels(int numberOfLevels) {
224
		this.numberOfLevels = numberOfLevels;
225
	}
226

  
227
	/**
228
	 * Asigna el valor del umbral de la posterizaci?n
229
	 * @param posterizationThreshold
230
	 */
231
	public void setPosterizationThreshold(int posterizationThreshold) {
232
		this.posterizationThreshold = posterizationThreshold;
233
	}
234

  
235
	/**
236
	 * Asigna el valor del radio del filtro de paso alto
237
	 * @param radiusHighPass
238
	 */
239
	public void setRadiusHighPass(int radiusHighPass) {
240
		this.radiusHighPass = radiusHighPass;
241
	}
242

  
243
	/**
244
	 * Asigna el valor del umbral del filtro de ruido
245
	 * @param thresholdNoise
246
	 */
247
	public void setThresholdNoise(int thresholdNoise) {
248
		this.thresholdNoise = thresholdNoise;
249
	}
65 250
}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/vectorizacion/VectorizationTocMenuEntry.java
136 136
		if (!(fLayer instanceof FLyrRasterSE))
137 137
			return;
138 138

  
139
		IPreviewRenderProcess prevRender = new GrayConversionPreviewRender();
139
		IPreviewRenderProcess prevRender = new GrayConversionPreviewRender((FLyrRasterSE)fLayer);
140 140
		
141 141
		//1-Creamos el controlador con la capa
142 142
		PreprocessListener vectListener = new PreprocessListener((FLyrRasterSE)fLayer);
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/vectorizacion/ui/PreprocessVectorizationPanel.java
62 62
	 * Constructor sin par?metro para poder instanciar como Bean
63 63
	 */
64 64
	public PreprocessVectorizationPanel() {
65
		renderProcess = new GrayConversionPreviewRender();
65
		renderProcess = new GrayConversionPreviewRender(null);
66 66
		init(null);
67 67
	}
68 68
	
......
136 136
			grayConvPanel = new GrayConversionPanel(list);
137 137
		return grayConvPanel;
138 138
	}
139
	
140
	/**
141
	 * Obtiene el panel con los paneles de conversi?n a B/W
142
	 * @return NextPrevPanel
143
	 */
144
	public GrayConversionPanel getGrayConversionPanel() {
145
		return grayConvPanel;
146
	}
139 147

  
140 148
}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/vectorizacion/listener/PreprocessListener.java
27 27
import java.util.ArrayList;
28 28

  
29 29
import javax.swing.JOptionPane;
30
import javax.swing.event.ChangeEvent;
31
import javax.swing.event.ChangeListener;
30 32
import javax.swing.event.TableModelEvent;
31 33
import javax.swing.event.TableModelListener;
32 34

  
......
37 39
import org.gvsig.gui.beans.table.TableContainer;
38 40
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
39 41
import org.gvsig.raster.datastruct.Extent;
42
import org.gvsig.raster.filter.grayscale.GrayScaleFilter;
40 43
import org.gvsig.raster.grid.GridException;
41 44
import org.gvsig.raster.grid.roi.ROI;
42 45
import org.gvsig.raster.util.RasterToolsUtil;
......
62 65
 * 12/06/2008
63 66
 * @author Nacho Brodin nachobrodin@gmail.com
64 67
 */
65
public class PreprocessListener implements ActionListener, TableModelListener, ButtonsPanelListener {
68
public class PreprocessListener implements ActionListener, TableModelListener, ButtonsPanelListener, ChangeListener {
66 69
	private PreprocessVectorizationPanel     prePanel                 = null;
67 70
	private FLyrRasterSE                     lyr                      = null;
68 71
	private boolean			                 enableValueChangedEvent  = true;
......
100 103
		this.prePanel = prepPanel;
101 104
		prepPanel.getNextPrevPanel().getNext().addActionListener(this);
102 105
		prepPanel.getNextPrevPanel().getPrev().addActionListener(this);
106
		prePanel.getPreviewBasePanel().getTabbedPane().addChangeListener(this);
107
		
103 108
		prepPanel.getCoordinatesSelectionPanel().getSelectionAreaPanel().getROI().addActionListener(this);
104 109
		prepPanel.getCoordinatesSelectionPanel().getSelectionAreaPanel().getButtonBarContainer().getButton(0).addActionListener(this);
105 110
		prepPanel.getCoordinatesSelectionPanel().getSelectionAreaPanel().getButtonBarContainer().getButton(1).addActionListener(this);
106
		prePanel.getCoordinatesSelectionPanel().getSelectionAreaPanel().getTableContainer().getModel().addTableModelListener(this);
111
		prepPanel.getCoordinatesSelectionPanel().getSelectionAreaPanel().getTableContainer().getModel().addTableModelListener(this);
112
		
113
		prepPanel.getGrayConversionPanel().getComboBands().addActionListener(this);
114
		
107 115
	}
108 116
	
109 117
	/**
......
156 164
			RasterToolsUtil.addWindow(roiManagerDialog);
157 165
		}
158 166
		
167
		//Cambio combo de bandas seleccionadas para la conversi?n a B/W
168
		if(e.getSource() == prePanel.getGrayConversionPanel().getComboBands()) {
169
			String value = (String)prePanel.getGrayConversionPanel().getComboBands().getSelectedItem();
170
			if(value.compareTo("R") == 0) 
171
				prevRender.setBandType(GrayScaleFilter.R);
172
			if(value.compareTo("G") == 0) 
173
				prevRender.setBandType(GrayScaleFilter.G);
174
			if(value.compareTo("B") == 0) 
175
				prevRender.setBandType(GrayScaleFilter.B);
176
			if(value.compareTo("RGB") == 0) 
177
				prevRender.setBandType(GrayScaleFilter.RGB);
178
			if(value.compareTo("GRAY") == 0) 
179
				prevRender.setBandType(GrayScaleFilter.GRAY);
180
		}
181
		
159 182
		//Bot?n de pantalla siguiente
160 183
		if(e.getSource() == prePanel.getNextPrevPanel().getNext()) {
161 184
			prePanel.getPreviewBasePanel().getTabbedPane().setSelectedIndex(++tabIndexSelected);
......
166 189
			prePanel.getPreviewBasePanel().getTabbedPane().setSelectedIndex(--tabIndexSelected);
167 190
		}
168 191
		
169
		showButtonsTabs();
192
		changeTabActions();
170 193
	}
171 194
	
172 195
	/**
173
	 * Muestra u oculta los botones de siguiente y anterior correspodiente a las selecci?n de Tabs.
196
	 * Acciones realizadas cuando se varia la selecci?n de Tab
174 197
	 */
175
	private void showButtonsTabs() {
198
	private void changeTabActions() {
199
		//Mostrar u ocultar botones
176 200
		if(tabIndexSelected >= (prePanel.getPreviewBasePanel().getTabbedPane().getTabCount() - 1))
177 201
			prePanel.getNextPrevPanel().getNext().setEnabled(false);
178 202
		if(tabIndexSelected < (prePanel.getPreviewBasePanel().getTabbedPane().getTabCount() - 1))
......
181 205
			prePanel.getNextPrevPanel().getPrev().setEnabled(false);
182 206
		if(tabIndexSelected > 0)
183 207
			prePanel.getNextPrevPanel().getPrev().setEnabled(true);
208
		
209
		//Mostrar u ocultar preview
184 210
		if(tabIndexSelected == 0)
185 211
			prevRender.setShowPreview(false);
186 212
		else
187 213
			prevRender.setShowPreview(true);
214
		prePanel.getPreviewBasePanel().refreshPreview();
188 215
	}
189 216
	
190 217
	/**
......
357 384
		assignROISExtent();
358 385
	}
359 386

  
387
	/*
388
	 * (non-Javadoc)
389
	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
390
	 */
391
	public void stateChanged(ChangeEvent e) {
392
		changeTabActions();
393
	}
394

  
360 395
}

Also available in: Unified diff