Revision 2308 org.gvsig.raster/branches/org.gvsig.raster_dataaccess_refactoring/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java

View differences:

DefaultRender.java
40 40
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
41 41
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
42 42
import org.gvsig.fmap.dal.coverage.exception.QueryException;
43
import org.gvsig.fmap.dal.coverage.filter.FilterLoader;
43 44
import org.gvsig.fmap.dal.coverage.grid.FilterListChangeEvent;
44 45
import org.gvsig.fmap.dal.coverage.grid.FilterListChangeListener;
45 46
import org.gvsig.fmap.dal.coverage.grid.Grid;
......
62 63
import org.gvsig.raster.cache.tile.provider.TileListener;
63 64
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
64 65
import org.gvsig.raster.impl.datastruct.ExtentImpl;
65
import org.gvsig.raster.impl.grid.GridImpl;
66 66
import org.gvsig.raster.impl.grid.filter.band.ColorTableFilter;
67 67
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
68 68
import org.gvsig.tools.ToolsLocator;
......
108 108
	 * N?mero de bandas a renderizar y en el orden que se har?. Esto es asignado
109 109
	 * por el usuario de la renderizaci?n.
110 110
	 */
111
	private int[]            renderBands              = { 0, 1, 2 };
111
	private int[]            renderBands              = { 0, 1, 2, 3 };
112 112

  
113 113
	private ImageDrawerImpl  drawer                   = null;
114
	
114 115
	/**
115
	 * Ultima transparencia aplicada en la visualizaci?n que es obtenida desde el
116
	 * grid
116
	 * 
117 117
	 */
118
	private Transparency     lastTransparency         = null;
118
	private Transparency     renderingTransparency    = null;
119 119
	private int              lastAlphaBand            = -1;
120 120
	
121 121
	/**
......
196 196
		drawer = new ImageDrawerImpl();
197 197

  
198 198
		if (dataStore == null) {
199
			setRenderBands(new int[] { 0, 1, 2 });
199
			setRenderBands(new int[] { 0, 1, 2, 3 });
200 200
			return;
201 201
		}
202 202

  
203 203
		//Bandas que se dibujan por defecto si la interpretaci?n de color no tiene valores
204 204
		switch (dataStore.getBandCount()) {
205 205
		case 1:
206
			setRenderBands(new int[] { 0, 0, 0 });
206
			setRenderBands(new int[] { 0, 0, 0, -1 });
207 207
			break;
208 208
		case 2:
209
			setRenderBands(new int[] { 0, 1, 1 });
209
			setRenderBands(new int[] { 0, 1, 1, -1 });
210 210
			break;
211 211
		default:
212
			setRenderBands(new int[] { 0, 1, 2 });
212
			setRenderBands(new int[] { 0, 1, 2, 3 });
213 213
			break;
214 214
		}
215 215

  
......
224 224
			if (colorInterpr.getBand(DataStoreColorInterpretation.PAL_BAND) == -1) {
225 225
				if (colorInterpr.isUndefined())
226 226
					return;
227
				int[] result = new int[] { -1, -1, -1 };
227
				int[] result = new int[] { -1, -1, -1, -1 };
228 228
				int gray = colorInterpr.getBand(DataStoreColorInterpretation.GRAY_BAND);
229 229
				if (gray != -1)
230 230
					result[0] = result[1] = result[2] = gray;
231 231
				else {
232
					int r = colorInterpr.getBand(DataStoreColorInterpretation.RED_BAND);
233
					if (r != -1)
234
						result[0] = r;
235
					int g = colorInterpr.getBand(DataStoreColorInterpretation.GREEN_BAND);
236
					if (g != -1)
237
						result[1] = g;
238
					int b = colorInterpr.getBand(DataStoreColorInterpretation.BLUE_BAND);
239
					if (b != -1)
240
						result[2] = b;
232
					result[0] = colorInterpr.getBand(DataStoreColorInterpretation.RED_BAND);
233
					result[1] = colorInterpr.getBand(DataStoreColorInterpretation.GREEN_BAND);
234
					result[2] = colorInterpr.getBand(DataStoreColorInterpretation.BLUE_BAND);
235
					result[3] = colorInterpr.getBand(DataStoreColorInterpretation.ALPHA_BAND);
241 236
				}
242 237
				setRenderBands(result);
243 238
			}
......
299 294
		}
300 295
	}
301 296
	
297
	public synchronized Buffer getLastRenderBuffer() 
298
		throws QueryException, ProcessInterruptedException {
299
		return draw(null, lastViewPortData, null);
300
	}
301
	
302 302
	public synchronized void drawTiledService(Graphics2D g, 
303 303
			ViewPortData vp, 
304 304
			Dimension2D viewDimension, 
......
314 314
		}
315 315
		
316 316
		if (dataStore != null) {
317
			//TODO:Eliminado pq parece que machaca lo que ha puesto BandSelectorPropertiesListener y no hace caso al selector de bandas. 
318
			//if(getLastTransparency().getAlphaBandNumber() == -1)
319
				//getLastTransparency().setTransparencyBand(dataStore.getTransparency().getAlphaBandNumber());
317
			lastAlphaBand = getRenderingTransparency().getAlphaBandNumber();
320 318
			
321
			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
322
			
323 319
			// Asignamos la banda de transparencia si existe esta
324 320
			RasterQuery query = getRasterManager().createQuery();
325 321
			query.setTaskStatus(taskStatus);
326 322
			query.setTime(vp.getTime());
327 323
			query.setSupersamplingOption(false); // Desactivamos el supersampleo en la carga del buffer.
324
			if(dataStore.getColorInterpretation().isRGB())
325
				renderBands[3] = 3;
328 326
			query.setDrawableBands(getRenderBands());
329
			query.setAlphaBand(lastAlphaBand);
327
			if(dataStore.getDataType()[0] == Buffer.TYPE_BYTE) {
328
				if(lastAlphaBand != -1)
329
					query.forceARGBRequest();
330
				else if(getRenderBands().length == 3 || (getRenderBands().length == 4 && getRenderBands()[3] == -1))
331
					query.forceRGBRequest();
332
				else
333
					query.forceARGBRequest();
334
			} else
335
				query.forceRGBRequest();
330 336
			query.setAreaOfInterest(vp.getExtent(), 
331 337
					(int)Math.round(vp.getWidth()), 
332 338
					(int)Math.round(vp.getHeight()), this);
......
336 342
			return;
337 343
	}
338 344
	
339
	public synchronized Buffer getLastRenderBuffer() 
340
		throws QueryException, ProcessInterruptedException {
341
		return draw(null, lastViewPortData, null);
345
	public synchronized void tileReady(Tile loadedTile) throws TileGettingException {
346
		boolean crash = false;
347
		Boolean tiling = (Boolean)loadedTile.getDownloaderParams("Tiling");
348
		double[] step = (double[])loadedTile.getDownloaderParams("Step");
349
		AffineTransform transf = (AffineTransform)loadedTile.getDownloaderParams("AffineTransform");
350
		
351
		Extent e = getRasterManager().getDataStructFactory().
352
		createExtent(loadedTile.getUl().getX(), 
353
				loadedTile.getUl().getY(), 
354
				loadedTile.getLr().getX(), 
355
				loadedTile.getLr().getY());
356
		
357
		Buffer buf = (loadedTile.getData() != null && loadedTile.getData().length > 0) ? (Buffer)loadedTile.getData()[0] : null;
358
		
359
		if(!loadedTile.dataIsLoaded()) {
360
			if(loadedTile.getCrashARGB() == null)
361
				return;
362
			crash = true;
363
			buf = (Buffer)loadedTile.getCrashARGB();
364
			buf.setDataExtent(e.toRectangle2D());
365
		} else {
366
			if(buf == null)
367
				return;
368
			ColorTable tileColorTable = (loadedTile.getData() != null && loadedTile.getData().length > 2) ? (ColorTable)loadedTile.getData()[2] : null;
369
			if(tiling == null || tiling.booleanValue()) {
370
				if(filterList != null) 
371
					addTileColorTable(tileColorTable);
372
			}
373
		}
374
		
375
		Transparency transparencyProcessed = null;
376
		if(tiling == null || tiling.booleanValue()) {
377
			try {
378
				transparencyProcessed = bufferPreprocessing(buf);
379
				buf = transparencyProcessed.getDataBuffer();
380
			} catch (ProcessInterruptedException e3) {
381
				return;
382
			}
383
		}
384

  
385
		if(tiling == null || tiling.booleanValue()) {
386
			//Reescalado de los tiles. El tama?o en pixels de un tile no tiene pq coincidir con el de la vista.
387
			double w = lastViewPortData.getWidth();
388
			double h = lastViewPortData.getHeight();
389
			if(viewDimension != null) {
390
				w = viewDimension.getWidth();
391
				h = viewDimension.getHeight();
392
			}
393
			double viewScaleW = lastViewPortData.getExtent().width() / w;
394
			double tileScaleW = e.width() / (double)buf.getWidth();
395
			double scaleW = viewScaleW / tileScaleW;
396
			double viewScaleH = lastViewPortData.getExtent().height() / h;
397
			double tileScaleH = e.height() / (double)buf.getHeight();
398
			double scaleH = viewScaleH / tileScaleH;
399

  
400
			ImageDrawerImpl d = new ImageDrawerImpl();
401
			d.setBuffer(buf);
402
			d.setSupersamplingOn(null);
403
			d.setOutputSize(buf.getWidth(), buf.getHeight());
404
			d.setLastTransparency(transparencyProcessed);
405
			Image geoImage;
406
			try {
407
				geoImage = d.drawBufferOverImageObject();
408
			} catch (ProcessInterruptedException e2) {
409
				return;
410
			}
411
			d.dispose();
412
			
413
			AffineTransform at = new AffineTransform();
414
			at.scale(1 / scaleW, 1 / scaleH);
415
			
416
			try {
417
				Point2D pt = new Point2D.Double(e.getULX(), e.getULY());
418
				((DefaultViewPortData)lastViewPortData).mat.transform(pt, pt);
419
				at.inverseTransform(pt, pt);
420

  
421
				lastGraphics.transform(at);
422
				lastGraphics.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
423
				lastGraphics.transform(at.createInverse());
424
				
425
			} catch (NoninvertibleTransformException e1) {
426
				e1.printStackTrace();
427
			}
428
		} else {
429
			try {
430
				drawBufferOnImage(lastGraphics, lastViewPortData, buf, step, transf, e);
431
			} catch (QueryException e1) {
432
				LoggerFactory.getLogger(getClass()).debug("Error loading data", e1);
433
			} catch (ProcessInterruptedException e1) {
434
			}
435
		}
436
		
437
		if(!crash) { //Las im?genes de crash no se liberan ya que est?n en un hashmap global
438
			if(buf != null)
439
				buf.dispose();
440
		}
342 441
	}
343 442
	
344 443
	public synchronized Buffer draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
......
370 469
					(int)Math.round(heightImage), 
371 470
					vp.getTime(), 
372 471
					renderBands, 
373
					getLastTransparency());
472
					getRenderingTransparency());
374 473
		} else {
375
			if (getLastTransparency().getAlphaBandNumber() != -1) {
376
				RasterQuery query = getRasterManager().createQuery();
377
				//query.setReadOnly(true);
378
				//query.setMemoryBuffer(true); //Ojo! con buffers remotos
379
				query.setTaskStatus(taskStatus);
380
				query.setTime(vp.getTime());
381
				query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
382
				query.setDrawableBands(new int[] { getLastTransparency().getAlphaBandNumber()});
383
				getLastTransparency().setAlphaBand(dataStore.query(query));
384
			}
385
			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
474
			lastAlphaBand = getRenderingTransparency().getAlphaBandNumber();
386 475

  
387 476
			RasterQuery query = getRasterManager().createQuery();
388
			//query.setReadOnly(true);
389
			//query.setMemoryBuffer(true); //Ojo! con buffers remotos
390 477
			query.setTaskStatus(taskStatus);
391 478
			query.setTime(vp.getTime());
392 479
			query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
393 480
			query.setDrawableBands(getRenderBands());
481
			if(dataStore.getDataType()[0] == Buffer.TYPE_BYTE) {
482
				if(lastAlphaBand != -1)
483
					query.forceARGBRequest();
484
				else if(getRenderBands().length == 3 || (getRenderBands().length == 4 && getRenderBands()[3] == -1))
485
					query.forceRGBRequest();
486
			} else
487
				query.forceRGBRequest();
394 488
			buf = dataStore.query(query);
395 489
			step = query.getStep();
396 490
		}
......
410 504
	private synchronized Buffer drawBufferOnImage(Graphics2D g, ViewPortData vp, Buffer buf, double[] step, AffineTransform transf, Extent adjustedRotedRequest)
411 505
		throws QueryException, ProcessInterruptedException {
412 506
		
413
		grid = bufferPreprocessing(buf, lastTransparency);
507
		Transparency transparencyProcessed = bufferPreprocessing(buf);
508
		buf = transparencyProcessed.getDataBuffer();
414 509
		
415
		//Buffer filtrado para renderizar
416
		buf = grid.getRasterBuf();
417 510
		if(g == null)
418 511
			return buf;
512
		
419 513
		drawer.setBuffer(buf); // Buffer de datos a renderizar
420 514
		drawer.setSupersamplingOn(step); // Desplazamiento para supersampleo
421 515
		drawer.setOutputSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
422
		drawer.setLastTransparency(getLastTransparency());
516
		drawer.setLastTransparency(transparencyProcessed);
423 517
		Image geoImage = drawer.drawBufferOverImageObject(); // Acci?n de renderizado
424 518
		drawer.dispose();
425

  
426
		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
427
		getLastTransparency().setAlphaBand(null);
428

  
519
		
429 520
		//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
430 521
		//transformaci?n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta
431 522
		//forma el raster resultante mejora un poco en calidad en ciertos niveles de zoom ya que al aplicar transformaciones
......
476 567
		// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs.");
477 568
	}
478 569
	
479
	public synchronized void tileReady(Tile loadedTile) throws TileGettingException {
480
		boolean crash = false;
481
		Boolean tiling = (Boolean)loadedTile.getDownloaderParams("Tiling");
482
		double[] step = (double[])loadedTile.getDownloaderParams("Step");
483
		AffineTransform transf = (AffineTransform)loadedTile.getDownloaderParams("AffineTransform");
484
		
485
		Extent e = getRasterManager().getDataStructFactory().
486
		createExtent(loadedTile.getUl().getX(), 
487
				loadedTile.getUl().getY(), 
488
				loadedTile.getLr().getX(), 
489
				loadedTile.getLr().getY());
490
		
491
		Buffer buf = (loadedTile.getData() != null && loadedTile.getData().length > 0) ? (Buffer)loadedTile.getData()[0] : null;
492
		Buffer transparencyBuffer = (loadedTile.getData() != null && loadedTile.getData().length > 1) 
493
										? (Buffer)loadedTile.getData()[1] : null;
494
		
495
		if(!loadedTile.dataIsLoaded()) {
496
			if(loadedTile.getCrashImage() == null)
497
				return;
498
			crash = true;
499
			buf = (Buffer)loadedTile.getCrashImage()[0];
500
			transparencyBuffer = (Buffer)loadedTile.getCrashImage()[1];
501
			transparencyBuffer.setDataExtent(e.toRectangle2D());
502
		} else {
503
			if(buf == null)
504
				return;
505
			ColorTable tileColorTable = (loadedTile.getData() != null && loadedTile.getData().length > 2) ? (ColorTable)loadedTile.getData()[2] : null;
506
			if(tiling == null || tiling.booleanValue()) {
507
				if(filterList != null) 
508
					addTileColorTable(tileColorTable);
509
			}
510
		}
511
		
512
		if(tiling == null || tiling.booleanValue()) {
513
			if(lastTransparency.getAlphaBandNumber() == -1)
514
				lastTransparency.setAlphaBand(null);
515
			else
516
				lastTransparency.setAlphaBand(transparencyBuffer);
517
			Grid grid = null;
518
			try {
519
				grid = bufferPreprocessing(buf, lastTransparency);
520
			} catch (ProcessInterruptedException e3) {
521
				return;
522
			}
523
			buf = grid.getRasterBuf();
524
		}
525

  
526
		if(tiling == null || tiling.booleanValue()) {
527
			//Reescalado de los tiles. El tama?o en pixels de un tile no tiene pq coincidir con el de la vista.
528
			double w = lastViewPortData.getWidth();
529
			double h = lastViewPortData.getHeight();
530
			if(viewDimension != null) {
531
				w = viewDimension.getWidth();
532
				h = viewDimension.getHeight();
533
			}
534
			double viewScaleW = lastViewPortData.getExtent().width() / w;
535
			double tileScaleW = e.width() / (double)buf.getWidth();
536
			double scaleW = viewScaleW / tileScaleW;
537
			double viewScaleH = lastViewPortData.getExtent().height() / h;
538
			double tileScaleH = e.height() / (double)buf.getHeight();
539
			double scaleH = viewScaleH / tileScaleH;
540

  
541
			ImageDrawerImpl d = new ImageDrawerImpl();
542
			d.setBuffer(buf);
543
			d.setSupersamplingOn(null);
544
			d.setOutputSize(buf.getWidth(), buf.getHeight());
545
			d.setLastTransparency(getLastTransparency());
546
			Image geoImage;
547
			try {
548
				geoImage = d.drawBufferOverImageObject();
549
			} catch (ProcessInterruptedException e2) {
550
				return;
551
			}
552
			d.dispose();
553
			
554
			lastTransparency.setAlphaBand(null);
555
			
556
			AffineTransform at = new AffineTransform();
557
			at.scale(1/scaleW, 1/scaleH);
558
			
559
			try {
560
				Point2D pt = new Point2D.Double(e.getULX(), e.getULY());
561
				((DefaultViewPortData)lastViewPortData).mat.transform(pt, pt);
562
				at.inverseTransform(pt, pt);
563

  
564
				lastGraphics.transform(at);
565
				lastGraphics.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
566
				lastGraphics.transform(at.createInverse());
567
				
568
			} catch (NoninvertibleTransformException e1) {
569
				e1.printStackTrace();
570
			}
571
		} else {
572
			try {
573
				drawBufferOnImage(lastGraphics, lastViewPortData, buf, step, transf, e);
574
			} catch (QueryException e1) {
575
				LoggerFactory.getLogger(getClass()).debug("Error loading data", e1);
576
			} catch (ProcessInterruptedException e1) {
577
			}
578
		}
579
		
580
		if(!crash) { //Las im?genes de crash no se liberan ya que est?n en un hashmap global
581
			if(buf != null)
582
				buf.dispose();
583
			if(transparencyBuffer != null)
584
				transparencyBuffer.dispose();
585
		}
586
	}
587

  
588 570
	/**
589 571
	 * Applies filters and transparency on the buffer and returns the grid with the modified buffer.
590 572
	 * @param buf
591 573
	 * @param transparency
592 574
	 * @throws ProcessInterruptedException
593 575
	 */
594
	private Grid bufferPreprocessing(Buffer buf, Transparency transparency) throws ProcessInterruptedException {
595
		if (dataStore != null) {
596
			//Asignamos los datos al objeto transparencia antes de aplicar la pila de filtros para que el valor NoData sea efectivo
597
			if (dataStore.getTransparency().getNoData().isNoDataTransparent() || transparency.existAlphaBand())
598
				transparency.setDataBuffer(buf);
599
			else {
600
				transparency.setDataBuffer(null);
601
			}
602
			transparency.activeTransparency();
603
		} else
604
			return null;
605

  
606
		//Aplicamos los filtros
607
		grid = new GridImpl(buf, dataStore, true);
608
		if(filterList != null) {
609
			filterList.addEnvParam("Transparency", transparency);
610
			grid.setFilterList(filterList);
611
			grid.applyFilters();
576
	private Transparency bufferPreprocessing(Buffer buf) throws ProcessInterruptedException {
577
		//Asignamos los datos al objeto transparencia antes de aplicar la pila de filtros para que el valor NoData sea efectivo
578
		if (getRenderingTransparency().getNoData().isNoDataTransparent() || 
579
				getRenderingTransparency().existAlphaBand())
580
			getRenderingTransparency().setDataBuffer(buf);
581
		else {
582
			getRenderingTransparency().setDataBuffer(null);
612 583
		}
584
		getRenderingTransparency().activeTransparency();
613 585
		
614
		//Si la lista de filtros genera bandas de transparencia se mezclan con la actual
615
		if(grid.getFilterList().getAlphaBand() != null) {
616
			Buffer t = grid.getFilterList().getAlphaBand();
617
			if(transparency.getAlphaBand() != null)
618
				t = getRasterManager().getColorConversion().mergeTransparencyBuffers(t, transparency.getAlphaBand());
619
			transparency.setAlphaBand(t);
620
			transparency.activeTransparency();
621
		}
586
		FilterLoader filterLoader = RasterLocator.getManager().createFilterLoader(filterList);
587
		filterLoader.addSrcBandCount(dataStore.getBandCount());
588
		filterLoader.addSrcDataType(dataStore.getDataType()[0]);
589
		filterLoader.addSrcStatistics(dataStore.getStatistics());
590
		filterLoader.addTransparency(getRenderingTransparency());
591
		Buffer result = filterLoader.applyFilters(buf);
622 592
		
623
		return grid;
593
		
594
		Transparency transparencyProcessed = filterLoader.getTransparency();
595
		transparencyProcessed.setDataBuffer(result);
596

  
597
		return transparencyProcessed;
624 598
	}
625
	
599

  
626 600
	/**
627 601
	 * When tiles are renderized the color table in each tile could be diferent.
628 602
	 * In this case the color table must be replaced
......
746 720
	
747 721
	public boolean isRenderingAsGray() {
748 722
		int[] renderBands = getRenderBands();
749
		if ((renderBands != null) && (renderBands.length == 3) && (renderBands[0] >= 0) &&
723
		if ((renderBands != null) && (renderBands.length == 3 || renderBands.length == 4) && (renderBands[0] >= 0) &&
750 724
				(renderBands[0] == renderBands[1]) && (renderBands[1] == renderBands[2]))
751 725
			return true;
752 726
		return false;
......
774 748
	public void setRenderBands(int[] renderBands) {
775 749
		if(	renderBands[0] != this.renderBands[0] ||
776 750
			renderBands[1] != this.renderBands[1] ||
777
			renderBands[2] != this.renderBands[2])
751
			renderBands[2] != this.renderBands[2] ||
752
			renderBands[3] != this.renderBands[3])
778 753
			callVisualPropertyChanged(renderBands);
754
		
779 755
		this.renderBands = renderBands;
780 756
		if (filterList != null)
781 757
			for (int i = 0; i < filterList.lenght(); i++)
......
807 783
		return out;
808 784
	}
809 785

  
810
	public Transparency getLastTransparency() {
786
	public Transparency getRenderingTransparency() {
811 787
		//If the transparency hasn't been defined yet then we'll take that from the store
812
		if (lastTransparency == null) {
813
			lastTransparency = dataStore.getTransparency().cloneTransparency();
814
			lastTransparency.addPropertyListener(this);
788
		if (renderingTransparency == null) {
789
			renderingTransparency = dataStore.getTransparency().cloneTransparency();
790
			renderingTransparency.addPropertyListener(this);
815 791
		}
816
		return lastTransparency;
792
		return renderingTransparency;
817 793
	}
818 794
	
819 795
	public int getLastAlphaBandNumber() {
......
821 797
	}
822 798

  
823 799
	public void setLastTransparency(Transparency lastTransparency) {
824
		this.lastTransparency = lastTransparency;
825
		if(this.lastTransparency != null)
826
			this.lastTransparency.addPropertyListener(this);
800
		this.renderingTransparency = lastTransparency;
801
		if(this.renderingTransparency != null)
802
			this.renderingTransparency.addPropertyListener(this);
827 803
	}
828 804

  
829 805
	public RasterFilterList getFilterList() {
......
879 855

  
880 856
	public void loadFromState(PersistentState state)
881 857
			throws PersistenceException {
882
		lastTransparency = (Transparency)state.get("lastTransparency");	
858
		renderingTransparency = (Transparency)state.get("lastTransparency");	
883 859
		renderBands = (int[])state.getIntArray("renderBands");
884 860
		//setFilterList((RasterFilterList)state.get("filterList"));
885 861
	}
886 862

  
887 863
	public void saveToState(PersistentState state) throws PersistenceException {
888
		state.set("lastTransparency", lastTransparency);
864
		state.set("lastTransparency", renderingTransparency);
889 865
		state.set("renderBands", renderBands);
890 866
		//state.set("filterList", filterList);
891 867
	}
......
908 884
	 * Sets buffers to null
909 885
	 */
910 886
	public void dispose() {
911
		if (lastTransparency != null)
912
			lastTransparency.dispose();
887
		if (renderingTransparency != null)
888
			renderingTransparency.dispose();
913 889
		if (grid != null)
914 890
			grid.dispose();
915 891
		if (getFilterList() != null)
......
925 901
		dataStore                = null;
926 902
		renderBands              = null;
927 903
        drawer                   = null;
928
		lastTransparency         = null;
904
		renderingTransparency         = null;
929 905
		filterList               = null;
930 906
        ulPxRequest              = null;
931 907
        lrPxRequest              = null;

Also available in: Unified diff