Revision 1676

View differences:

org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.basic/src/main/java/org/gvsig/raster/tools/app/basic/tool/histogram/ui/HistogramDialog.java
34 34
 * <code>HistogramDialog</code>. Creaci?n de la ventana de histograma para gvSIG.
35 35
 *
36 36
 * @version 20/03/2007
37
 * @author Nacho Brodin (brodin_ign@gva.es)
38
 * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
37
 * @author Nacho Brodin (nachobrodin@gmail.com)
38
 * @author BorSanZa - Borja Sanchez Zamorano 
39 39
 */
40 40
public class HistogramDialog extends JPanel implements IWindow, ButtonsPanelListener {
41 41
	private static final long serialVersionUID = 7362459094802955247L;
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.basic/src/main/java/org/gvsig/raster/tools/app/basic/tool/histogram/HistogramPanelListener.java
44 44
import org.gvsig.fmap.dal.coverage.datastruct.BufferHistogram;
45 45
import org.gvsig.fmap.dal.coverage.datastruct.HistogramClass;
46 46
import org.gvsig.fmap.dal.coverage.exception.HistogramException;
47
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
47 48
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
49
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
48 50
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
49 51
import org.gvsig.fmap.dal.exception.DataException;
50 52
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
......
193 195
			ArrayList comboSource = getHistogramPanel().getComboSource();
194 196
			for (int i = 0; i < comboSource.size(); i++) {
195 197
				String name = (String) ((ArrayList) comboSource.get(i)).get(1);
196
				if (name.compareTo(RasterToolsUtil.getText(this, "datos_visualizados")) == 0) {
198
				if (cbo.getSelectedItem().equals(name) && 
199
					name.compareTo(RasterToolsUtil.getText(this, "datos_visualizados")) == 0) {
197 200
					((ArrayList) comboSource.get(i)).remove(0);
198
					((ArrayList) comboSource.get(i)).add(0, ((FLyrRaster) lyr).getRender().getLastRenderBuffer().getHistogramComputer());
201
					try {
202
						((ArrayList) comboSource.get(i)).add(0, ((FLyrRaster) lyr).getRender().getLastRenderBuffer().getHistogramComputer());
203
					} catch (RasterDriverException e1) {
204
						RasterToolsUtil.messageBoxError("histogram_error", getHistogramPanel(), e1);
205
					} catch (InvalidSetViewException e1) {
206
						RasterToolsUtil.messageBoxError("histogram_error", getHistogramPanel(), e1);
207
					} catch (ProcessInterruptedException e1) {
208
					}
199 209

  
200 210
				}
201
				if (name.compareTo(RasterToolsUtil.getText(this, "imagen_completa")) == 0) {
211
				if (cbo.getSelectedItem().equals(name) && 
212
					name.compareTo(RasterToolsUtil.getText(this, "imagen_completa")) == 0) {
202 213
					((ArrayList) comboSource.get(i)).remove(0);
203 214
					((ArrayList) comboSource.get(i)).add(0, ((FLyrRaster) lyr).getDataStore().getHistogramComputer());
204 215
				}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java
188 188
	 * @throws InvalidSetViewException
189 189
	 * @throws ArrayIndexOutOfBoundsException
190 190
	 */
191
	public void draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
191
	public Buffer draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
192 192
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException;
193 193
	
194 194
	/**
......
226 226
	public void drawThread(Graphics2D g, ViewPortData vp);
227 227
	
228 228
	/**
229
	 * Draws the image with the parameters used in the last drawn. 
230
	 * @return
231
	 */
232
	public Buffer getLastRenderBuffer()
233
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException;
234
	
235
	/**
229 236
	 * Sets the view structures to draw
230 237
	 * @param g
231 238
	 * @param vp
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/store/props/HistogramComputer.java
67 67
	 */
68 68
	public void refreshHistogram();
69 69
	
70
	/**
71
	 * This value represents the percentage of the image that will be used 
72
	 * for this process. The default value is one, that means that the entire 
73
	 * image will be processed
74
	 */
75
	public void setScaleHistogram(double scale);
76
	
70 77
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/BufferHistogramComputer.java
42 42
	protected int			            progressHistogram    = 0;
43 43
	private double[]                    limits               = null;
44 44
	private boolean                     refresh              = false;
45
	@SuppressWarnings("unused")
46
	private double                      scale                = 1;
45 47
	
46 48
	/**
47 49
	 * Constructor
......
51 53
		this.buffer = buffer;
52 54
	}
53 55
	
56
	public void setScaleHistogram(double scale) {
57
		this.scale = scale;
58
	}
59
	
54 60
	/*
55 61
	 * (non-Javadoc)
56 62
	 * @see org.gvsig.fmap.dal.coverage.store.props.HistogramComputer#getBufferHistogram()
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/SimpleProviderHistogramComputer.java
61 61
	private RasterProvider          provider  = null;
62 62
	private int                     percent   = 0;
63 63
	private boolean                 refresh   = false;
64
	private double                  scale     = 1;
64 65
	
65 66
	/**
66 67
	 * Constructor
......
69 70
	public SimpleProviderHistogramComputer(RasterProvider provider) {
70 71
		this.provider = provider;
71 72
	}
73
	
74
	public void setScaleHistogram(double scale) {
75
		this.scale = scale;
76
	}
72 77

  
73 78
	/**
74 79
	 * Obtiene el minimo valor de las estadisticas de un histograma.
......
197 202
		for (int block = 0; block < provider.getHeight(); block += h) {
198 203
			Object buf = null;
199 204
			try {
200
				buf = provider.readBlock(block, h, RasterLibrary.statisticsScale);
205
				buf = provider.readBlock(block, h, scale);
201 206
			} catch (InvalidSetViewException e) {
202 207
				// La vista se asigna autom?ticamente
203 208
			}
......
206 211
			if ((block + hB) > provider.getHeight())
207 212
				hB = Math.abs(((int)provider.getHeight()) - block);
208 213
			
209
			hB *= RasterLibrary.statisticsScale;
214
			hB *= scale;
210 215

  
211 216
			if(buf instanceof Buffer) {
212 217
				loadHistogramFromBuffer((Buffer)buf);
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/MultiProviderHistogramComputer.java
21 21
 */
22 22
package org.gvsig.raster.impl.store.properties;
23 23

  
24
import org.gvsig.fmap.dal.coverage.RasterLibrary;
25 24
import org.gvsig.fmap.dal.coverage.datastruct.BufferHistogram;
26 25
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
27 26
import org.gvsig.fmap.dal.coverage.exception.HistogramException;
......
46 45
	private boolean                     refresh     = false;
47 46
	private int                         percent     = 0;
48 47
	private int                         files       = 0;
48
	private double                      scale       = 1;
49 49
	
50 50
	/**
51 51
	 * Constructor
......
56 56
		files = provider.getInternalProviderCount();
57 57
	}
58 58
	
59
	public void setScaleHistogram(double scale) {
60
		this.scale = scale;
61
	}
62
	
59 63
	/**
60 64
	 * Obtiene el histograma. Pregunta a todos los datasets que forman el multidataset
61 65
	 * por su histograma y luego los fusiona.
......
81 85
					return null;
82 86

  
83 87
				try {
84
					provider.getStatistics().calculate(RasterLibrary.statisticsScale);
88
					provider.getStatistics().calculate(scale);
85 89
				} catch (FileNotOpenException e) {
86 90
					throw new HistogramException("");
87 91
				} catch (RasterDriverException e) {
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/BufferHistogramImpl.java
425 425

  
426 426
		double[][] res = new double[5][];
427 427

  
428
		double[] min = new double[bandCount];// M?nimo
429
		double[] max = new double[bandCount];// M?ximo
430
		for (int iBand = 0; iBand < bandCount; iBand++) {
431
			max[iBand] = Double.NEGATIVE_INFINITY;
432
			min[iBand] = Double.POSITIVE_INFINITY;
433
		}
434 428
		double[] average = new double[bandCount]; // Valor de pixel medio (Media)
435 429
		double[] middle = new double[bandCount]; // Mediana
436 430
		double[] nPixelsBand = new double[bandCount];// N?mero de pixels por banda
......
440 434
		for (int iBand = 0; iBand < histogram.length; iBand++) {
441 435
			if (bands[iBand]) {
442 436
				for (int i = beginPos; i <= endPos; i++) {
443
					// Calculo del m?nimo
444
					if (histogram[iBand][i].getValue() != 0 && histogram[iBand][i].getMin() < min[showBandCounter])
445
						min[showBandCounter] = histogram[iBand][i].getMin();
446

  
447
					// Calculo del m?ximo
448
					if (histogram[iBand][i].getValue() != 0 && histogram[iBand][i].getMax() > max[showBandCounter])
449
						max[showBandCounter] = histogram[iBand][i].getMin();
450

  
451 437
					// Calculo del n?mero de pixeles
452 438
					nPixelsBand[showBandCounter] += histogram[iBand][i].getValue();
453

  
454 439
					average[showBandCounter] += histogram[iBand][i].getValue() * ((histogram[iBand][i].getMax() + histogram[iBand][i].getMin())/2);
455 440
				}
456 441
				// Calculo de la media
......
462 447

  
463 448
				// Calculo de mediana
464 449
				double stopPos = nPixelsBand[showBandCounter] / 2;
465
				int aux = 0;
450
				double aux = 0;
466 451
				int i = beginPos;
467 452
				for (i = beginPos; aux <= stopPos; i++) {
468 453
					if (i >= histogram[iBand].length)
......
474 459
					}
475 460
				}
476 461
				middle[showBandCounter] = (histogram[iBand][i - 1].getMax() + histogram[iBand][i - 1].getMin()) / 2;
477

  
478 462
				showBandCounter++;
479 463
			}
480 464
		}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java
351 351
			return;
352 352
	}
353 353
	
354
	/*
355
	 * (non-Javadoc)
356
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
357
	 */
358
	public synchronized void draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
354
	public synchronized Buffer getLastRenderBuffer() 
359 355
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
356
		return draw(null, lastViewPortData, null);
357
	}
358
	
359
	public synchronized Buffer draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
360
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
360 361
		lastGraphics = g;
361 362
		lastViewPortData = vp;
362 363

  
363 364
		if(util.isOutside(vp.getExtent(), dataStore.getExtent())) {
364 365
			endReading();
365
			return;
366
			return null;
366 367
		}
367 368

  
368 369
		Extent adjustedRotedRequest = request(vp, dataStore);
369 370

  
370 371
		if ((widthImage <= 0) || (heightImage <= 0)) {
371 372
			endReading();
372
			return;
373
			return null;
373 374
		}
374 375

  
375 376
		if (dataStore == null) 
376
			return;
377
			return null;
377 378
		
378 379
		Buffer buf = null; 
379 380
		double[] step = null;
......
388 389
		} else {
389 390
			// Asignamos la banda de transparencia si existe esta
390 391
			RasterQuery query = DefaultRasterManager.getInstance().createQuery();
392
			//query.setReadOnly(true);
391 393
			query.setTaskStatus(taskStatus);
392 394
			query.setTime(vp.getTime());
393 395
			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
......
411 413
			init();
412 414
		}
413 415
		
414
		drawBufferOnImage(lastGraphics, 
415
				lastViewPortData, 
416
				buf, 
417
				step, 
418
				dataStore.getAffineTransform(), 
419
				adjustedRotedRequest);
416
		return drawBufferOnImage(lastGraphics, 
417
					lastViewPortData, 
418
					buf, 
419
					step, 
420
					dataStore.getAffineTransform(), 
421
					adjustedRotedRequest);
420 422
	}
421 423
	
422 424
	/*
423 425
	 * (non-Javadoc)
424 426
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
425 427
	 */
426
	private synchronized void drawBufferOnImage(Graphics2D g, ViewPortData vp, Buffer buf, double[] step, AffineTransform transf, Extent adjustedRotedRequest)
428
	private synchronized Buffer drawBufferOnImage(Graphics2D g, ViewPortData vp, Buffer buf, double[] step, AffineTransform transf, Extent adjustedRotedRequest)
427 429
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
428 430
		
429 431
		grid = bufferPreprocessing(buf, lastTransparency);
430 432
		
431 433
		//Buffer filtrado para renderizar
432 434
		buf = grid.getRasterBuf();
435
		if(g == null)
436
			return buf;
433 437
		drawer.setBuffer(buf); // Buffer de datos a renderizar
434 438
		drawer.setSupersamplingOn(step); // Desplazamiento para supersampleo
435 439
		drawer.setOutputSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
......
448 452
			Point2D lastGraphicOffset = new Point2D.Double(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY());
449 453
			((DefaultViewPortData)vp).mat.transform(lastGraphicOffset, lastGraphicOffset);
450 454
			g.drawImage(geoImage, (int) Math.round(lastGraphicOffset.getX()), (int) Math.round(lastGraphicOffset.getY()), null);
451
			return;
455
			return buf;
452 456
		}
453 457

  
454 458
		/*
......
485 489
			LoggerFactory.getLogger(getClass()).debug("Transformation error", e);
486 490
		}
487 491
		
488
		return;
492
		return buf;
489 493
		// long t2 = new Date().getTime();
490 494
		// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs.");
491 495
	}

Also available in: Unified diff