Revision 19494

View differences:

trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchParams.java
19 19
package org.gvsig.raster.grid.filter.enhancement;
20 20

  
21 21
import org.gvsig.raster.dataset.FileNotOpenException;
22
import org.gvsig.raster.dataset.IBuffer;
23 22
import org.gvsig.raster.dataset.io.RasterDriverException;
24 23
import org.gvsig.raster.dataset.properties.DatasetListStatistics;
25 24
import org.gvsig.raster.hierarchy.IStatistics;
......
127 126
		 * @param type
128 127
		 * @param band
129 128
		 */
130
		public void setMaxMin(DatasetListStatistics stats, int type, int band) {
129
		public void setMaxMin(DatasetListStatistics stats, int band, boolean rgb) {
131 130
			try {
132
				/*if(type == IBuffer.TYPE_BYTE) {
131
				if(rgb) {
133 132
					if(stats.getMinRGB() != null)
134 133
						minValue = stats.getMinRGB()[band];
135 134
					if(stats.getMaxRGB() != null)
136 135
						maxValue = stats.getMaxRGB()[band];
137
				} else {*/
136
				} else {
138 137
					if(stats.getMin() != null)
139 138
						minValue = stats.getMin()[band];
140 139
					if(stats.getMax() != null)
141 140
						maxValue = stats.getMax()[band];
142
				//}
141
				}
143 142
			} catch (ArrayIndexOutOfBoundsException ex) {
144 143
				//No se asigna el m?ximo o m?nimo 
145 144
			}
......
148 147
		/**
149 148
		 * Aplica el eliminado de extremos. Para ello utiliza el segundo m?ximo y m?nimo de entrada.
150 149
		 */
151
		public void applyRemoveEndsToStretchs(DatasetListStatistics stats, int type, int band) {
150
		public void applyRemoveEndsToStretchs(DatasetListStatistics stats, boolean rgb, int band) {
152 151
			if(stretchIn == null)
153 152
				return;
154 153
			try {
155
				/*if(type == IBuffer.TYPE_BYTE) {
154
				if(rgb) {
156 155
					if(stats.getSecondMinRGB() != null)
157 156
						stretchIn[0] = minValue = stats.getSecondMinRGB()[band];
158 157
					if(stats.getSecondMaxRGB() != null)
159 158
						stretchIn[stretchIn.length - 1] = maxValue = stats.getSecondMaxRGB()[band];
160
				} else {*/
159
				} else {
161 160
					if(stats.getSecondMin() != null)
162 161
						stretchIn[0] = minValue = stats.getSecondMin()[band];
163 162
					if(stats.getMax() != null)
164 163
						stretchIn[stretchIn.length - 1] = maxValue = stats.getSecondMax()[band];
165
				//}
164
				}
166 165
			} catch (ArrayIndexOutOfBoundsException ex) {
167 166
				//No se asigna el m?ximo o m?nimo 
168 167
			}
......
173 172
	public Stretch             green             = new Stretch();
174 173
	public Stretch             blue              = new Stretch();
175 174
	public Stretch             gray              = new Stretch();
175
	public boolean             rgb               = false;
176 176
			
177 177
	/**
178 178
	 * Consulta si tiene alg?n valor el recorte de colas
......
259 259
	 * @param type
260 260
	 * @param band
261 261
	 */
262
	public void setMaxMin(DatasetListStatistics stats, int type) {
263
		red.setMaxMin(stats, type, 0);
264
		green.setMaxMin(stats, type, 1);
265
		blue.setMaxMin(stats, type, 2);
266
		gray.setMaxMin(stats, type, 0);
262
	public void setMaxMin(DatasetListStatistics stats) {
263
		red.setMaxMin(stats, 0, rgb);
264
		green.setMaxMin(stats, 1, rgb);
265
		blue.setMaxMin(stats, 2, rgb);
266
		gray.setMaxMin(stats, 0, rgb);
267 267
	}
268 268
	
269 269
	/**
270 270
	 * Aplica el eliminado de extremos. Para ello utiliza el segundo m?ximo y m?nimo de entrada.
271 271
	 */
272
	public void applyRemoveEndsToStretchs(DatasetListStatistics stats, int type) {
273
		red.applyRemoveEndsToStretchs(stats, type, 0);
274
		green.applyRemoveEndsToStretchs(stats, type, 1);
275
		blue.applyRemoveEndsToStretchs(stats, type, 2);
276
		gray.applyRemoveEndsToStretchs(stats, type, 0);
272
	public void applyRemoveEndsToStretchs(DatasetListStatistics stats) {
273
		red.applyRemoveEndsToStretchs(stats, rgb, 0);
274
		green.applyRemoveEndsToStretchs(stats, rgb, 1);
275
		blue.applyRemoveEndsToStretchs(stats, rgb, 2);
276
		gray.applyRemoveEndsToStretchs(stats, rgb, 0);
277 277
	}
278 278
	
279 279
	/**
......
286 286
	 * @throws FileNotOpenException
287 287
	 * @throws RasterDriverException
288 288
	 */
289
	public static LinearStretchParams createStandardParam(int nBands, double tailTrim, IStatistics stats, int dataType) throws FileNotOpenException, RasterDriverException {
289
	public static LinearStretchParams createStandardParam(int nBands, double tailTrim, IStatistics stats, boolean rgb) throws FileNotOpenException, RasterDriverException {
290 290
		LinearStretchParams leParams = new LinearStretchParams();
291
		leParams.rgb = rgb;
291 292
		try {
292 293
			stats.calcFullStatistics();
293 294
		} catch (InterruptedException e) {
294 295
			return null;
295 296
		}
296 297
		if(nBands == 1) {
297
			/*if(dataType == IBuffer.TYPE_BYTE)
298
			if(rgb)
298 299
				leParams.gray.stretchIn = new double[]{stats.getMinRGB()[0], stats.getMaxRGB()[0]};
299
			else*/
300
			else
300 301
				leParams.gray.stretchIn = new double[]{stats.getMin()[0], stats.getMax()[0]};
301
			leParams.gray.stretchOut = new int[]{-128, 127};
302
			leParams.gray.stretchOut = new int[]{0, 255};
302 303
			leParams.gray.tailTrimMin = tailTrim;
303 304
			leParams.gray.tailTrimMax = tailTrim;
304 305
		}
305 306
		if(nBands >= 2) {
306
			/*if(dataType == IBuffer.TYPE_BYTE)
307
			if(rgb)
307 308
				leParams.red.stretchIn = new double[]{stats.getMinRGB()[0], stats.getMaxRGB()[0]};
308
			else*/
309
			else
309 310
				leParams.red.stretchIn = new double[]{stats.getMin()[0], stats.getMax()[0]};
310
			leParams.red.stretchOut = new int[]{-128, 127};
311
			leParams.red.stretchOut = new int[]{0, 255};
311 312
			leParams.red.tailTrimMin = tailTrim;
312 313
			leParams.red.tailTrimMax = tailTrim;
313 314
			
314
			/*if(dataType == IBuffer.TYPE_BYTE)
315
			if(rgb)
315 316
				leParams.green.stretchIn = new double[]{stats.getMinRGB()[0], stats.getMaxRGB()[0]};
316
			else*/
317
			else 
317 318
				leParams.green.stretchIn = new double[]{stats.getMin()[1], stats.getMax()[1]};
318
			leParams.green.stretchOut = new int[]{-128, 127};
319
			leParams.green.stretchOut = new int[]{0, 255};
319 320
			leParams.green.tailTrimMin = tailTrim;
320 321
			leParams.green.tailTrimMax = tailTrim;
321 322
		}
322 323
		if(nBands >= 3) {
323
			/*if(dataType == IBuffer.TYPE_BYTE)
324
			if(rgb)
324 325
				leParams.blue.stretchIn = new double[]{stats.getMinRGB()[0], stats.getMaxRGB()[0]};
325
			else*/
326
			else 
326 327
				leParams.blue.stretchIn = new double[]{stats.getMin()[2], stats.getMax()[2]};
327
			leParams.blue.stretchOut = new int[]{-128, 127};
328
			leParams.blue.stretchOut = new int[]{0, 255};
328 329
			leParams.blue.tailTrimMin = tailTrim;
329 330
			leParams.blue.tailTrimMax = tailTrim;
330 331
		}
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementDoubleFilter.java
72 72
				p = (double) data.minValue;
73 73
			
74 74
			for (int i = 0; i < data.scale.length; i++) {
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) 
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) {
76 76
					p =  (double)( (((double)p) - data.stretchIn[i]) * data.scale[i] + data.offset[i]);
77
					break;
78
				}
77 79
			}
78 80
			rasterResult.setElem(line, col, iBand, (byte)(((byte) p) & 0xff));
79 81
		}
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementIntFilter.java
72 72
				p = (int) data.minValue;
73 73
			
74 74
			for (int i = 0; i < data.scale.length; i++) {
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) 
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) { 
76 76
					p =  (int)( (((double)p) - data.stretchIn[i]) * data.scale[i] + data.offset[i]);
77
					break;
78
				}
77 79
			}
78 80
			rasterResult.setElem(line, col, iBand, (byte)(((byte) p) & 0xff));
79 81
		}
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementShortFilter.java
73 73
				p = (short) data.minValue;
74 74
		
75 75
			for (int i = 0; i < data.scale.length; i++) {
76
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) 
76
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) { 
77 77
					p = (short) (((short) (((((double) p) - data.stretchIn[i]) * data.scale[i]) + data.offset[i])) & 0xff);
78
					break;
79
				}
78 80
			}
79 81
		
80 82
			rasterResult.setElem(line, col, iBand, (byte)(((byte) p) & 0xff));
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/EnhancementStretchListManager.java
226 226
			double tailTrimGrayMin = 0;
227 227
			double tailTrimGrayMax = 0;
228 228
			boolean removeEnds = false;
229
			boolean rgb = false;
229 230

  
230 231
			for (int i = 0; i < params.getNumParams(); i++) {
231 232
				if (params.getParam(i).id.equals("RenderBands") && 
......
240 241
				if (params.getParam(i).id.equals("Remove"))
241 242
					removeEnds = ((Boolean) params.getParam(i).defaultValue).booleanValue();
242 243
				
244
				if (params.getParam(i).id.equals("RGB"))
245
					rgb = ((Boolean) params.getParam(i).defaultValue).booleanValue();
246
				
243 247
				if (params.getParam(i).id.equals("StretchInRed") &&
244 248
					params.getParam(i).defaultValue instanceof double[])
245 249
					stretchInRed = ((double[]) params.getParam(i).defaultValue);
......
306 310
				
307 311
			}
308 312
			LinearStretchParams leParams = new LinearStretchParams();
313
			leParams.rgb = rgb;
309 314
			leParams.red.stretchIn = stretchInRed;
310 315
			leParams.green.stretchIn = stretchInGreen;
311 316
			leParams.blue.stretchIn = stretchInBlue;
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementFloatFilter.java
72 72
				p = (float) data.minValue;
73 73
		
74 74
			for (int i = 0; i < data.scale.length; i++) {
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) 
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) { 
76 76
					p =  (float)( (((double)p) - data.stretchIn[i]) * data.scale[i] + data.offset[i]);
77
					break;
78
				}
77 79
			}
78 80
			rasterResult.setElem(line, col, iBand,(byte)(((byte) p) & 0xff) );
79 81
			
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementFilter.java
51 51
	
52 52
	protected LinearStretchParams      stretchs          = null;
53 53
	protected Stretch[]                scaleOffsetList   = null;
54
	/**
55
	 * Considera una imagen byte con un rango rgb(0, 255) o datos en rango byte (-128, 127) 
56
	 */
57
	protected boolean                  rgb               = false;
54 58

  
55 59
	/**
56 60
	 * Construye un LinearEnhancementFilter
......
69 73
		stretchs = (LinearStretchParams) params.get("stretchs");
70 74
		if(params.get("remove") != null)
71 75
			removeEnds = ((Boolean)params.get("remove")).booleanValue();
72
		
76
				
73 77
		if(stretchs == null)
74 78
			return;
75 79
		
......
95 99
			exec = false;
96 100
		}
97 101

  
98
		stretchs.setMaxMin(stats, raster.getDataType());
102
		stretchs.setMaxMin(stats);
99 103
		
100 104
		if(removeEnds)
101
			stretchs.applyRemoveEndsToStretchs(stats, raster.getDataType());
105
			stretchs.applyRemoveEndsToStretchs(stats);
102 106
		
103 107
		stretchs.loadTailTrimValues(stats);
104 108
		
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/LinearStretchEnhancementByteFilter.java
36 36
	 */
37 37
	public void process(int col, int line) {
38 38
		for (int iBand = 0; iBand < raster.getBandCount(); iBand++) {
39
			int p = (int)(raster.getElemByte(line, col, iBand) /*& 0xff*/);
39
			int p = 0;
40
			if(stretchs.rgb)
41
				p = (int)(raster.getElemByte(line, col, iBand) & 0xff);
42
			else
43
				p = (int)raster.getElemByte(line, col, iBand);
44
			
40 45
			if (renderBands[iBand] < 0) {
41 46
				rasterResult.setElem(line, col, iBand, (byte) p);
42 47
				continue;
......
72 77
				p = (int) data.minValue;
73 78
			
74 79
			for (int i = 0; i < data.scale.length; i++) {
75
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) 
80
				if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) {
76 81
					p =  (int)( (((double)p) - data.stretchIn[i]) * data.scale[i] + data.offset[i]);
82
					break;
83
				}
77 84
			}
78 85
			rasterResult.setElem(line, col, iBand, (byte)p);
79 86
		}

Also available in: Unified diff