org.gvsig.raster.patch

Ignacio Brodín, 03/14/2013 05:42 PM

Download (12.1 KB)

View differences:

org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java (working copy)
1698 1698
	}
1699 1699

  
1700 1700
	/**
1701
	 * Gets the last buffer which was rendered
1702
	 */
1703
	public Buffer getLastRenderBuffer() {
1704
		return getRender().getLastRenderBuffer();
1705
	}
1706

  
1707
	/**
1708 1701
	 *
1709 1702
	 * @return ROIs asociadas a la capa raster.
1710 1703
	 */
org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java (working copy)
61 61
import org.gvsig.raster.cache.tile.exception.TileGettingException;
62 62
import org.gvsig.raster.cache.tile.provider.TileListener;
63 63
import org.gvsig.raster.impl.DefaultRasterManager;
64
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
64 65
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
65 66
import org.gvsig.raster.impl.datastruct.ExtentImpl;
66 67
import org.gvsig.raster.impl.grid.GridImpl;
......
111 112
	 */
112 113
	private int[]            renderBands              = { 0, 1, 2 };
113 114

  
114
	private ImageDrawerImpl      drawer                   = null;
115
	private ImageDrawerImpl  drawer                   = null;
115 116
	/**
116 117
	 * Ultima transparencia aplicada en la visualizaci�n que es obtenida desde el
117 118
	 * grid
......
124 125
	 */
125 126
	private RasterFilterList filterList               = null;
126 127

  
127
	private Buffer           lastRenderBuffer         = null;
128

  
129 128
	/**
130 129
	 * Ancho y alto del objeto Image en una petici�n de dibujado a un raster
131 130
	 * raster
......
330 329
		}
331 330
		
332 331
		if (dataStore != null) {
333
			if (lastTransparency == null) {
334
				lastTransparency = dataStore.getTransparency().cloneTransparency();
335
				lastTransparency.addPropertyListener(this);
336
				lastTransparency.setTransparencyBand(dataStore.getTransparency().getAlphaBandNumber());
337
			}
332
			if(getLastTransparency().getAlphaBandNumber() == -1)
333
				getLastTransparency().setTransparencyBand(dataStore.getTransparency().getAlphaBandNumber());
338 334
			
339
			lastAlphaBand = lastTransparency.getAlphaBandNumber();
335
			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
340 336
			
341 337
			// Asignamos la banda de transparencia si existe esta
342 338
			RasterQuery query = DefaultRasterManager.getInstance().createQuery();
......
345 341
			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
346 342
			query.setDrawableBands(getRenderBands());
347 343
			query.setFrameWidth(0);
348
			query.setAlphaBand(lastTransparency.getAlphaBandNumber());
344
			query.setAlphaBand(getLastTransparency().getAlphaBandNumber());
349 345
			query.setAreaOfInterest(vp.getExtent(), 
350 346
					(int)Math.round(vp.getWidth()), 
351 347
					(int)Math.round(vp.getHeight()), this);
......
379 375
		if (dataStore == null) 
380 376
			return;
381 377
		
382
		//If the transparency hasn't been defined yet then we'll take that from the store
383
		if (lastTransparency == null) {
384
			lastTransparency = dataStore.getTransparency().cloneTransparency();
385
			lastTransparency.addPropertyListener(this);
386
		}
387
		
388 378
		Buffer buf = null; 
389 379
		double[] step = null;
390 380
		
......
394 384
					(int)Math.round(heightImage), 
395 385
					vp.getTime(), 
396 386
					renderBands, 
397
					lastTransparency);
387
					getLastTransparency());
398 388
		} else {
399 389
			// Asignamos la banda de transparencia si existe esta
400 390
			RasterQuery query = DefaultRasterManager.getInstance().createQuery();
......
403 393
			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
404 394
			query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
405 395

  
406
			if (lastTransparency.getAlphaBandNumber() != -1) {
407
				query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber()});
408
				lastTransparency.setAlphaBand(dataStore.query(query));
396
			if (getLastTransparency().getAlphaBandNumber() != -1) {
397
				query.setDrawableBands(new int[] { getLastTransparency().getAlphaBandNumber()});
398
				getLastTransparency().setAlphaBand(dataStore.query(query));
409 399
			}
410
			lastAlphaBand = lastTransparency.getAlphaBandNumber();
400
			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
411 401

  
412 402
			query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
413 403
			query.setDrawableBands(getRenderBands());
414 404
			buf = dataStore.query(query);
405
			((DefaultRasterQuery)query).setBuffer(null);
415 406
			query.setSupersamplingLoadingBuffer(true);
416 407
			step = dataStore.getStep();
417 408
		}
......
437 428
		
438 429
		grid = bufferPreprocessing(buf, lastTransparency);
439 430
		
440
		if(lastRenderBuffer != null)
441
			lastRenderBuffer.dispose();
442 431
		//Buffer filtrado para renderizar
443
		lastRenderBuffer = grid.getRasterBuf();
444
		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
432
		buf = grid.getRasterBuf();
433
		drawer.setBuffer(buf); // Buffer de datos a renderizar
445 434
		drawer.setSupersamplingOn(step); // Desplazamiento para supersampleo
446 435
		drawer.setOutputSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
447 436
		drawer.setLastTransparency(getLastTransparency());
448 437
		Image geoImage = drawer.drawBufferOverImageObject(); // Acci�n de renderizado
438
		drawer.dispose();
449 439

  
450 440
		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
451
		lastTransparency.setAlphaBand(null);
441
		getLastTransparency().setAlphaBand(null);
452 442

  
453 443
		//En el caso de no tenga rotaci�n y el tama�o de pixel sea positivo en X y negativo en Y no aplicamos ninguna
454 444
		//transformaci�n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta
......
574 564
			} catch (ProcessInterruptedException e2) {
575 565
				return;
576 566
			}
577

  
567
			d.dispose();
568
			
578 569
			lastTransparency.setAlphaBand(null);
579 570
			
580 571
			AffineTransform at = new AffineTransform();
......
853 844
		return out;
854 845
	}
855 846

  
856
	/*
857
	 * (non-Javadoc)
858
	 * @see org.gvsig.fmap.dal.coverage.grid.Render#getLastTransparency()
859
	 */
860 847
	public Transparency getLastTransparency() {
848
		//If the transparency hasn't been defined yet then we'll take that from the store
849
		if (lastTransparency == null) {
850
			lastTransparency = dataStore.getTransparency().cloneTransparency();
851
			lastTransparency.addPropertyListener(this);
852
		}
861 853
		return lastTransparency;
862 854
	}
863 855
	
......
889 881

  
890 882
	/*
891 883
	 * (non-Javadoc)
892
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#getLastRenderBuffer()
893
	 */
894
	public Buffer getLastRenderBuffer() {
895
		return this.lastRenderBuffer;
896
	}
897

  
898
	/*
899
	 * (non-Javadoc)
900
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setLastRenderBuffer(org.gvsig.fmap.dal.coverage.dataset.Buffer)
901
	 */
902
	public void setLastRenderBuffer(Buffer buf) {
903
		this.lastRenderBuffer = buf;
904
	}
905

  
906
	/*
907
	 * (non-Javadoc)
908 884
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setFilterList(org.gvsig.fmap.dal.coverage.grid.RasterFilterList)
909 885
	 */
910 886
	public void setFilterList(RasterFilterList filterList) {
......
1007 983
			grid.dispose();
1008 984
		if (getFilterList() != null)
1009 985
			getFilterList().dispose();
1010
		if (lastRenderBuffer != null)
1011
			lastRenderBuffer.dispose();
1012 986
		try {
1013 987
			finalize();
1014 988
		} catch (Throwable e) {
......
1026 1000
        drawer                   = null;
1027 1001
		lastTransparency         = null;
1028 1002
		filterList               = null;
1029
        lastRenderBuffer         = null;
1030 1003
        ulPxRequest              = null;
1031 1004
        lrPxRequest              = null;
1032 1005
		lastGraphics             = null;
org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/ImageDrawerImpl.java (working copy)
345 345
	public void dispose() {
346 346
		if(rasterBuf != null)
347 347
			rasterBuf.dispose();
348
		if(transparency != null)
349
			transparency.dispose();
348 350
		try {
349 351
			finalize();
350 352
		} catch (Throwable e) {
......
421 423
	protected void finalize() throws Throwable {
422 424
		step        = null;
423 425
		rasterBuf   = null;
426
		transparency = null;
424 427
		super.finalize();
425 428
	}
426 429

  
org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreTransparency.java (working copy)
134 134
		
135 135
		//TODO: FUNCIONALIDAD: Falta asignar lo necesario para la transparencia por selecci� 		this.transparencyRanges = (ArrayList<TransparencyRange>) t.getTransparencyRange().clone();
136
		this.mask = t.getAlphaBand();
136
		if(this.mask != null)
137
			this.mask = t.getAlphaBand();
137 138
		this.opacity = t.getOpacity();
138 139
		this.alphaBandNumber = t.alphaBandNumber;
139 140
		this.noData = (NoData)t.getNoData().clone();
140
		this.originalData = t.originalData;
141
		if(this.originalData != null)
142
			this.originalData = t.originalData;
141 143
		this.transparencyActive = t.transparencyActive;
142 144
	}
143 145

  
......
422 424
	 * @see org.gvsig.fmap.dal.coverage.store.props.Transparency#activeTransparency()
423 425
	 */
424 426
	public void activeTransparency() {
425
		if(	existAlphaBand() || (getNoData().isDefined() && getNoData().isNoDataTransparent()) ||
427
		if(	existAlphaBand() || 
428
			(getNoData() != null && getNoData().isDefined() && getNoData().isNoDataTransparent()) ||
426 429
			(transparencyRanges.size() > 0) ||
427 430
			(opacity != 0xff))
428 431
			transparencyActive = true;
......
617 620
			mask.dispose();
618 621
		if (originalData != null)
619 622
			originalData.dispose();
620
		try {
621
			finalize();
622
		} catch (Throwable e) {
623
		}
623
		mask = null;
624
		originalData = null;
624 625
	}
625 626
	
626 627
	/*
org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreColorTable.java (working copy)
952 952
		}
953 953
	}
954 954
	
955
	public void finalize() {
956
		if(colorItems != null) {
957
			colorItems.clear();
958
			colorItems = null;
959
		}
960
		range             = null;
961
		paletteByBand     = null;
962
		if(nameClass != null) {
963
			for (int i = 0; i < nameClass.length; i++) {
964
				nameClass[i] = null;
965
			}
966
			nameClass = null;
967
		}
968
		name              = null;
969
		filePath          = null;
970
	}
971
	
972 955
}
org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java (working copy)
76 76
	public int getLastAlphaBandNumber();
77 77
	
78 78
	/**
79
	 * Obtiene el �ltimo buffer renderizado.
80
	 * @return Buffer
81
	 */
82
	public Buffer getLastRenderBuffer();
83

  
84
	/**
85
	 * Asigna el �ltimo renderizado.
86
	 * @param buf
87
	 */
88
	public void setLastRenderBuffer(Buffer buf);
89
	
90
	/**
91 79
	 * Informa de si el raster tiene tabla de color asociada o no.
92 80
	 * @return true si tiene tabla de color y false si no la tiene.
93 81
	 */