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;
|