Revision 21816 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/vectorizacion/GrayConversionPreviewRender.java

View differences:

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
}

Also available in: Unified diff