Revision 1708
org.gvsig.raster.tools/tags/2.0.0/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.tools/tags/2.0.0/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/tags/2.0.0/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/FLyrRaster.java | ||
---|---|---|
53 | 53 |
* |
54 | 54 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
55 | 55 |
*/ |
56 |
@SuppressWarnings("deprecation") |
|
56 | 57 |
public interface FLyrRaster extends FLayer { |
57 | 58 |
/** |
58 | 59 |
* Gets the uniform resource identifier |
... | ... | |
416 | 417 |
* @param t |
417 | 418 |
*/ |
418 | 419 |
public void setNoDataTransparent(boolean t); |
420 |
|
|
419 | 421 |
} |
org.gvsig.raster/tags/2.0.0/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java | ||
---|---|---|
172 | 172 |
static private IConfiguration configuration = new DefaultLayerConfiguration(); |
173 | 173 |
protected int zoomLevel = 1; |
174 | 174 |
public boolean recalcLevel = true; |
175 |
private String uri = null; |
|
175 | 176 |
|
176 |
private BufferedImage image = null; |
|
177 | 177 |
private static GeometryManager geomManager = GeometryLocator.getGeometryManager(); |
178 | 178 |
private static final Logger logger = LoggerFactory.getLogger(DefaultFLyrRaster.class); |
179 | 179 |
protected FileUtils fileUtil = RasterLocator.getManager().getFileUtils(); |
180 | 180 |
protected RasterUtils rasterUtil = RasterLocator.getManager().getRasterUtils(); |
181 | 181 |
protected CRSUtils crsUtil = RasterLocator.getManager().getCRSUtils(); |
182 | 182 |
protected MathUtils mathUtil = RasterLocator.getManager().getMathUtils(); |
183 |
private String uri = null; |
|
184 |
//private boolean noDataTransparent = true; |
|
183 |
|
|
185 | 184 |
|
186 | 185 |
public class RasterTaskStatus extends BaseTaskStatus { |
187 | 186 |
Cancellable c = null; |
... | ... | |
552 | 551 |
* com.iver.utiles.swing.threads.Cancellable) |
553 | 552 |
*/ |
554 | 553 |
public void draw(BufferedImage image, Graphics2D g, ViewPort vp, Cancellable cancel, double scale) throws ReadException { |
555 |
this.image = image; |
|
556 | 554 |
TaskEventManager task = rManager.getRasterTask(); |
557 | 555 |
task.setEvent(null); |
558 | 556 |
|
... | ... | |
718 | 716 |
* @param y Posici?n y |
719 | 717 |
* @return valor de pixel |
720 | 718 |
*/ |
721 |
public int[] getPixel(int pxx, int pxy) { |
|
722 |
int[] argb = { -1, -1, -1, -1 }; |
|
723 |
if (!isOpen() || (image == null)) |
|
724 |
return argb; |
|
725 |
if (pxx >= 0 && pxx < image.getWidth() && pxy >= 0 && pxy < image.getHeight()) { |
|
726 |
int value = image.getRGB(pxx, pxy); |
|
727 |
argb[0] = ((value & 0xff000000) >> 24); |
|
728 |
argb[1] = ((value & 0x00ff0000) >> 16); |
|
729 |
argb[2] = ((value & 0x0000ff00) >> 8); |
|
730 |
argb[3] = (value & 0x000000ff); |
|
731 |
} |
|
732 |
return argb; |
|
733 |
} |
|
719 |
// public int[] getPixel(int pxx, int pxy) {
|
|
720 |
// int[] argb = { -1, -1, -1, -1 };
|
|
721 |
// if (!isOpen() || (image == null))
|
|
722 |
// return argb;
|
|
723 |
// if (pxx >= 0 && pxx < image.getWidth() && pxy >= 0 && pxy < image.getHeight()) {
|
|
724 |
// int value = image.getRGB(pxx, pxy);
|
|
725 |
// argb[0] = ((value & 0xff000000) >> 24);
|
|
726 |
// argb[1] = ((value & 0x00ff0000) >> 16);
|
|
727 |
// argb[2] = ((value & 0x0000ff00) >> 8);
|
|
728 |
// argb[3] = (value & 0x000000ff);
|
|
729 |
// }
|
|
730 |
// return argb;
|
|
731 |
// }
|
|
734 | 732 |
|
735 | 733 |
/* |
736 | 734 |
* (non-Javadoc) |
... | ... | |
850 | 848 |
|
851 | 849 |
if (/*!isOpen() ||*/ !isVisible() || !isWithinScale(scale)) |
852 | 850 |
return; |
851 |
|
|
852 |
TaskStatusManager manager = ToolsLocator.getTaskStatusManager(); |
|
853 |
SimpleTaskStatus taskStatus = new RasterTaskStatus("Printing raster " + getName() + "...", cancel); |
|
854 |
manager.add(taskStatus); |
|
855 |
taskStatus.setAutoremove(true); |
|
853 | 856 |
|
854 | 857 |
if (!mustTilePrint) |
855 | 858 |
draw(null, g, viewPort, cancel,scale); |
856 | 859 |
else { |
857 |
// Para no pedir imagenes demasiado grandes, vamos |
|
858 |
// a hacer lo mismo que hace EcwFile: chunkear. |
|
859 |
// Llamamos a drawView con cuadraditos m?s peque?os |
|
860 |
// del BufferedImage ni caso, cuando se imprime viene con null |
|
861 | 860 |
Tiling tiles = new Tiling(maxTilePrintWidth, maxTilePrintHeight, g.getClipBounds()); |
862 | 861 |
tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone()); |
863 |
|
|
864 |
//Si es la primera lectura salvamos los valores de m?ximo y m?nimo para la aplicaci?n |
|
865 |
//de realce si la imagen es de 16 bits. |
|
866 |
|
|
867 |
//RasterStats stats = getSource().getFilterStack().getStats(); |
|
868 |
//if(stats != null) |
|
869 |
//stats.history.add(stats.new History(getName(), stats.minBandValue, stats.maxBandValue, stats.secondMinBandValue, stats.secondMaxBandValue)); |
|
870 |
|
|
871 |
|
|
872 |
for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) |
|
862 |
taskStatus.setRangeOfValues(0, tiles.getNumTiles()); |
|
863 |
for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) { |
|
873 | 864 |
// Parte que dibuja |
874 | 865 |
try { |
875 | 866 |
ViewPort vp = tiles.getTileViewPort(viewPort, tileNr); |
876 | 867 |
draw(null, g, vp, cancel, scale); |
868 |
taskStatus.setCurValue(tileNr); |
|
877 | 869 |
} catch (NoninvertibleTransformException e) { |
878 | 870 |
throw new ReadException("Error en la transformaci?n.", e); |
871 |
} finally { |
|
872 |
taskStatus.terminate(); |
|
879 | 873 |
} |
874 |
} |
|
880 | 875 |
} |
876 |
|
|
877 |
taskStatus.terminate(); |
|
881 | 878 |
} |
882 | 879 |
|
883 | 880 |
public void _print(Graphics2D g, ViewPort viewPort, Cancellable cancel, |
... | ... | |
991 | 988 |
} |
992 | 989 |
|
993 | 990 |
if (this.isRemoveRasterFlag()) { |
994 |
image = null; |
|
995 | 991 |
if (getDataStore() != null) { |
996 | 992 |
String[] files = getFileName().clone(); |
997 | 993 |
|
... | ... | |
1210 | 1206 |
pReal.getY() < this.getMaxY()) { |
1211 | 1207 |
px = transformPoint(pReal); |
1212 | 1208 |
} |
1213 |
int[] rgb = getPixel((int) p.getX(), (int) p.getY()); |
|
1214 |
ColorConversion conv = rManager.getColorConversion(); |
|
1209 |
//int[] rgb = getPixel((int) p.getX(), (int) p.getY()); |
|
1210 |
//ColorConversion conv = rManager.getColorConversion(); |
|
1211 |
|
|
1215 | 1212 |
info.addField("File", normalizeAsXMLTag(getName()), 0); |
1216 | 1213 |
info.addField("View Point", "[" + p.getX() + " , " + p.getY() + "]", 1); |
1217 | 1214 |
info.addField("World Point", "[" + mathUtil.format(pReal.getX(), 3) + " , " + mathUtil.format(pReal.getY(), 3) + "]", 2); |
... | ... | |
1219 | 1216 |
info.addField("Pixel Point", "Out", 3); |
1220 | 1217 |
else |
1221 | 1218 |
info.addField("Pixel Point", "[" + (int) px.getX() + ", " + (int) px.getY() + "]", 3); |
1222 |
info.addField("RGB", "[" + rgb[1] + ", " + rgb[2] + ", " + rgb[3] + "]", 4); |
|
1219 |
|
|
1220 |
//La informaci?n RGB no puede obtener de la capa |
|
1221 |
|
|
1222 |
/*info.addField("RGB", "[" + rgb[1] + ", " + rgb[2] + ", " + rgb[3] + "]", 4); |
|
1223 | 1223 |
double[] cmyk = conv.RGBtoCMYK(rgb[1] & 0xff, rgb[2] & 0xff, rgb[3] & 0xff, 1D); |
1224 | 1224 |
info.addField("CMYK", "[" + mathUtil.format(cmyk[0], 4) + ", " + mathUtil.format(cmyk[1], 4) + ", " + mathUtil.format(cmyk[2], 4) + ", " + mathUtil.format(cmyk[3], 4) + "]", 5); |
1225 | 1225 |
double[] hsl = conv.RGBtoHSL(rgb[1] & 0xff, rgb[2] & 0xff, rgb[3] & 0xff); |
1226 | 1226 |
hsl[0] = (int)(255.0 * hsl[0] / 360.0 + 0.5); |
1227 | 1227 |
hsl[2] = (int) (hsl[2] * 255. + 0.5); |
1228 | 1228 |
hsl[1] = (int) (hsl[1] * 255. + 0.5); |
1229 |
info.addField("HSL", "[" + mathUtil.format(hsl[0], 4) + ", " + mathUtil.format(hsl[1], 4) + ", " + mathUtil.format(hsl[2], 4) + "]", 6); |
|
1229 |
info.addField("HSL", "[" + mathUtil.format(hsl[0], 4) + ", " + mathUtil.format(hsl[1], 4) + ", " + mathUtil.format(hsl[2], 4) + "]", 6);*/ |
|
1230 |
|
|
1230 | 1231 |
String data = "["; |
1231 | 1232 |
try { |
1232 | 1233 |
if (px != null) { |
... | ... | |
1698 | 1699 |
} |
1699 | 1700 |
|
1700 | 1701 |
/** |
1701 |
* Gets the last buffer which was rendered |
|
1702 |
*/ |
|
1703 |
public Buffer getLastRenderBuffer() { |
|
1704 |
return getRender().getLastRenderBuffer(); |
|
1705 |
} |
|
1706 |
|
|
1707 |
/** |
|
1708 | 1702 |
* |
1709 | 1703 |
* @return ROIs asociadas a la capa raster. |
1710 | 1704 |
*/ |
... | ... | |
2159 | 2153 |
} |
2160 | 2154 |
} |
2161 | 2155 |
|
2156 |
public void setDataStore(DataStore dataStore, String domain) throws LoadLayerException { |
|
2157 |
setDataStore(dataStore); |
|
2158 |
} |
|
2159 |
|
|
2162 | 2160 |
/* |
2163 | 2161 |
* (non-Javadoc) |
2164 | 2162 |
* @see java.lang.Object#finalize() |
... | ... | |
2174 | 2172 |
} |
2175 | 2173 |
strategy = null; |
2176 | 2174 |
configuration = null; |
2177 |
image = null; |
|
2178 | 2175 |
fileUtil = null; |
2179 | 2176 |
rasterUtil = null; |
2180 | 2177 |
crsUtil = null; |
... | ... | |
2186 | 2183 |
render = null; |
2187 | 2184 |
} |
2188 | 2185 |
|
2189 |
public void setDataStore(DataStore dataStore, String domain) |
|
2190 |
throws LoadLayerException { |
|
2191 |
setDataStore(dataStore); |
|
2192 |
} |
|
2193 |
|
|
2194 | 2186 |
} |
org.gvsig.raster/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java | ||
---|---|---|
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 |
*/ |
... | ... | |
200 | 188 |
* @throws InvalidSetViewException |
201 | 189 |
* @throws ArrayIndexOutOfBoundsException |
202 | 190 |
*/ |
203 |
public void draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
|
|
191 |
public Buffer draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus)
|
|
204 | 192 |
throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException; |
205 | 193 |
|
206 | 194 |
/** |
... | ... | |
238 | 226 |
public void drawThread(Graphics2D g, ViewPortData vp); |
239 | 227 |
|
240 | 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 |
/** |
|
241 | 236 |
* Sets the view structures to draw |
242 | 237 |
* @param g |
243 | 238 |
* @param vp |
org.gvsig.raster/tags/2.0.0/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/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java | ||
---|---|---|
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); |
... | ... | |
355 | 351 |
return; |
356 | 352 |
} |
357 | 353 |
|
358 |
/* |
|
359 |
* (non-Javadoc) |
|
360 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData) |
|
361 |
*/ |
|
362 |
public synchronized void draw(Graphics2D g, ViewPortData vp, TaskStatus taskStatus) |
|
354 |
public synchronized Buffer getLastRenderBuffer() |
|
363 | 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 { |
|
364 | 361 |
lastGraphics = g; |
365 | 362 |
lastViewPortData = vp; |
366 | 363 |
|
367 | 364 |
if(util.isOutside(vp.getExtent(), dataStore.getExtent())) { |
368 | 365 |
endReading(); |
369 |
return; |
|
366 |
return null;
|
|
370 | 367 |
} |
371 | 368 |
|
372 | 369 |
Extent adjustedRotedRequest = request(vp, dataStore); |
373 | 370 |
|
374 | 371 |
if ((widthImage <= 0) || (heightImage <= 0)) { |
375 | 372 |
endReading(); |
376 |
return; |
|
373 |
return null;
|
|
377 | 374 |
} |
378 | 375 |
|
379 | 376 |
if (dataStore == null) |
380 |
return; |
|
377 |
return null;
|
|
381 | 378 |
|
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 | 379 |
Buffer buf = null; |
389 | 380 |
double[] step = null; |
390 | 381 |
|
... | ... | |
394 | 385 |
(int)Math.round(heightImage), |
395 | 386 |
vp.getTime(), |
396 | 387 |
renderBands, |
397 |
lastTransparency);
|
|
388 |
getLastTransparency());
|
|
398 | 389 |
} else { |
399 | 390 |
// Asignamos la banda de transparencia si existe esta |
400 | 391 |
RasterQuery query = DefaultRasterManager.getInstance().createQuery(); |
392 |
//query.setReadOnly(true); |
|
401 | 393 |
query.setTaskStatus(taskStatus); |
402 | 394 |
query.setTime(vp.getTime()); |
403 | 395 |
query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer. |
404 | 396 |
query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage)); |
405 | 397 |
|
406 |
if (lastTransparency.getAlphaBandNumber() != -1) {
|
|
407 |
query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber()});
|
|
408 |
lastTransparency.setAlphaBand(dataStore.query(query));
|
|
398 |
if (getLastTransparency().getAlphaBandNumber() != -1) {
|
|
399 |
query.setDrawableBands(new int[] { getLastTransparency().getAlphaBandNumber()});
|
|
400 |
getLastTransparency().setAlphaBand(dataStore.query(query));
|
|
409 | 401 |
} |
410 |
lastAlphaBand = lastTransparency.getAlphaBandNumber();
|
|
402 |
lastAlphaBand = getLastTransparency().getAlphaBandNumber();
|
|
411 | 403 |
|
412 | 404 |
query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage)); |
413 | 405 |
query.setDrawableBands(getRenderBands()); |
414 | 406 |
buf = dataStore.query(query); |
407 |
((DefaultRasterQuery)query).setBuffer(null); |
|
415 | 408 |
query.setSupersamplingLoadingBuffer(true); |
416 | 409 |
step = dataStore.getStep(); |
417 | 410 |
} |
... | ... | |
420 | 413 |
init(); |
421 | 414 |
} |
422 | 415 |
|
423 |
drawBufferOnImage(lastGraphics, |
|
424 |
lastViewPortData, |
|
425 |
buf, |
|
426 |
step, |
|
427 |
dataStore.getAffineTransform(), |
|
428 |
adjustedRotedRequest); |
|
416 |
return drawBufferOnImage(lastGraphics,
|
|
417 |
lastViewPortData,
|
|
418 |
buf,
|
|
419 |
step,
|
|
420 |
dataStore.getAffineTransform(),
|
|
421 |
adjustedRotedRequest);
|
|
429 | 422 |
} |
430 | 423 |
|
431 | 424 |
/* |
432 | 425 |
* (non-Javadoc) |
433 | 426 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData) |
434 | 427 |
*/ |
435 |
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)
|
|
436 | 429 |
throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException { |
437 | 430 |
|
438 | 431 |
grid = bufferPreprocessing(buf, lastTransparency); |
439 | 432 |
|
440 |
if(lastRenderBuffer != null) |
|
441 |
lastRenderBuffer.dispose(); |
|
442 | 433 |
//Buffer filtrado para renderizar |
443 |
lastRenderBuffer = grid.getRasterBuf(); |
|
444 |
drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar |
|
434 |
buf = grid.getRasterBuf(); |
|
435 |
if(g == null) |
|
436 |
return buf; |
|
437 |
drawer.setBuffer(buf); // Buffer de datos a renderizar |
|
445 | 438 |
drawer.setSupersamplingOn(step); // Desplazamiento para supersampleo |
446 | 439 |
drawer.setOutputSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer |
447 | 440 |
drawer.setLastTransparency(getLastTransparency()); |
448 | 441 |
Image geoImage = drawer.drawBufferOverImageObject(); // Acci?n de renderizado |
442 |
drawer.dispose(); |
|
449 | 443 |
|
450 | 444 |
// Borramos el buffer de transparencia para que siempre se tenga que regenerar. |
451 |
lastTransparency.setAlphaBand(null);
|
|
445 |
getLastTransparency().setAlphaBand(null);
|
|
452 | 446 |
|
453 | 447 |
//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 | 448 |
//transformaci?n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta |
... | ... | |
458 | 452 |
Point2D lastGraphicOffset = new Point2D.Double(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY()); |
459 | 453 |
((DefaultViewPortData)vp).mat.transform(lastGraphicOffset, lastGraphicOffset); |
460 | 454 |
g.drawImage(geoImage, (int) Math.round(lastGraphicOffset.getX()), (int) Math.round(lastGraphicOffset.getY()), null); |
461 |
return; |
|
455 |
return buf;
|
|
462 | 456 |
} |
463 | 457 |
|
464 | 458 |
/* |
... | ... | |
495 | 489 |
LoggerFactory.getLogger(getClass()).debug("Transformation error", e); |
496 | 490 |
} |
497 | 491 |
|
498 |
return; |
|
492 |
return buf;
|
|
499 | 493 |
// long t2 = new Date().getTime(); |
500 | 494 |
// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs."); |
501 | 495 |
} |
... | ... | |
574 | 568 |
} catch (ProcessInterruptedException e2) { |
575 | 569 |
return; |
576 | 570 |
} |
577 |
|
|
571 |
d.dispose(); |
|
572 |
|
|
578 | 573 |
lastTransparency.setAlphaBand(null); |
579 | 574 |
|
580 | 575 |
AffineTransform at = new AffineTransform(); |
... | ... | |
853 | 848 |
return out; |
854 | 849 |
} |
855 | 850 |
|
856 |
/* |
|
857 |
* (non-Javadoc) |
|
858 |
* @see org.gvsig.fmap.dal.coverage.grid.Render#getLastTransparency() |
|
859 |
*/ |
|
860 | 851 |
public Transparency getLastTransparency() { |
852 |
//If the transparency hasn't been defined yet then we'll take that from the store |
|
853 |
if (lastTransparency == null) { |
|
854 |
lastTransparency = dataStore.getTransparency().cloneTransparency(); |
|
855 |
lastTransparency.addPropertyListener(this); |
|
856 |
} |
|
861 | 857 |
return lastTransparency; |
862 | 858 |
} |
863 | 859 |
|
... | ... | |
889 | 885 |
|
890 | 886 |
/* |
891 | 887 |
* (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 | 888 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#setFilterList(org.gvsig.fmap.dal.coverage.grid.RasterFilterList) |
909 | 889 |
*/ |
910 | 890 |
public void setFilterList(RasterFilterList filterList) { |
... | ... | |
1007 | 987 |
grid.dispose(); |
1008 | 988 |
if (getFilterList() != null) |
1009 | 989 |
getFilterList().dispose(); |
1010 |
if (lastRenderBuffer != null) |
|
1011 |
lastRenderBuffer.dispose(); |
|
1012 | 990 |
try { |
1013 | 991 |
finalize(); |
1014 | 992 |
} catch (Throwable e) { |
... | ... | |
1026 | 1004 |
drawer = null; |
1027 | 1005 |
lastTransparency = null; |
1028 | 1006 |
filterList = null; |
1029 |
lastRenderBuffer = null; |
|
1030 | 1007 |
ulPxRequest = null; |
1031 | 1008 |
lrPxRequest = null; |
1032 | 1009 |
lastGraphics = null; |
org.gvsig.raster/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/ImageDrawerImpl.java | ||
---|---|---|
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/tags/2.0.0/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/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/cache/RasterReadOnlyBuffer.java | ||
---|---|---|
97 | 97 |
private int offset = 1; |
98 | 98 |
|
99 | 99 |
private int bufWidth, bufHeight; |
100 |
private int blockHeight = RasterLibrary.blockHeight; |
|
100 | 101 |
|
101 | 102 |
/** |
102 | 103 |
* Constructor. Asigna las variables de inicializaci?n y crea la estructura de |
... | ... | |
112 | 113 |
*/ |
113 | 114 |
public RasterReadOnlyBuffer(int dataType, int width, int height, int nBand) { |
114 | 115 |
this.dataType = dataType; |
115 |
this.width = width;
|
|
116 |
this.height = height;
|
|
117 |
this.nBands = nBand;
|
|
116 |
this.width = width; |
|
117 |
this.height = height; |
|
118 |
this.nBands = nBand; |
|
118 | 119 |
} |
119 | 120 |
|
120 | 121 |
/** |
... | ... | |
174 | 175 |
this.maxX = maxX; |
175 | 176 |
this.maxY = maxY; |
176 | 177 |
|
177 |
if(Math.abs(maxX - minX) != width)
|
|
178 |
if(Math.abs(maxX - minX) != width || Math.abs(maxY - minY) != height) {
|
|
178 | 179 |
bufWidth = width; |
179 |
if(Math.abs(maxY - minY) != height) |
|
180 | 180 |
bufHeight = height; |
181 |
} |
|
181 | 182 |
|
182 | 183 |
init(); |
183 | 184 |
} |
... | ... | |
190 | 191 |
*/ |
191 | 192 |
private void init() { |
192 | 193 |
//Calculo de los bits por p?gina |
193 |
int h = RasterLibrary.blockHeight;
|
|
194 |
int h = blockHeight; |
|
194 | 195 |
while(h > 1) { |
195 | 196 |
h >>= 1; |
196 | 197 |
bitsPag ++; |
197 | 198 |
} |
198 | 199 |
|
199 | 200 |
//Calculo del desplazamiento |
200 |
offset = RasterLibrary.blockHeight - 1;
|
|
201 |
offset = blockHeight - 1; |
|
201 | 202 |
|
202 | 203 |
//Creamos el bufferFactory asociado a la carga de p?ginas. Cada p?gina se fuerza |
203 | 204 |
//a que sea cargada en memoria. |
... | ... | |
205 | 206 |
query.setMemoryBuffer(true); |
206 | 207 |
query.setDrawableBands(bandList.getDrawableBands()); |
207 | 208 |
|
208 |
nPages = (int)Math.ceil((double)height / (double)RasterLibrary.blockHeight);
|
|
209 |
nPages = (int)Math.ceil((double)height / (double)blockHeight); |
|
209 | 210 |
//double aux = ((double)height / (double)RasterLibrary.blockHeight); |
210 | 211 |
//heightLastPage = (int)((aux - (int)aux) * RasterLibrary.blockHeight); |
211 |
if(height % RasterLibrary.blockHeight == 0)
|
|
212 |
heightLastPage = RasterLibrary.blockHeight;
|
|
212 |
if(height % blockHeight == 0) |
|
213 |
heightLastPage = blockHeight; |
|
213 | 214 |
else { |
214 |
double aux = ((double)height / (double)RasterLibrary.blockHeight);
|
|
215 |
heightLastPage = (int)((aux - (int)aux) * RasterLibrary.blockHeight);
|
|
215 |
double aux = ((double)height / (double)blockHeight); |
|
216 |
heightLastPage = (int)((aux - (int)aux) * blockHeight); |
|
216 | 217 |
} |
217 | 218 |
|
218 | 219 |
drawableBands = new int[datasource.getBandCount()]; |
219 |
for (int i = 0; i < drawableBands.length; i++)
|
|
220 |
for (int i = 0; i < drawableBands.length; i++) |
|
220 | 221 |
drawableBands[i] = i; |
221 | 222 |
} |
222 | 223 |
|
... | ... | |
251 | 252 |
*/ |
252 | 253 |
public Extent[] calcExtentPages(DefaultRasterProvider dataset, int nPages) { |
253 | 254 |
Extent datasetExtent = dataset.getExtent(); |
254 |
double h = (RasterLibrary.blockHeight * dataset.getExtent().height()) / dataset.getHeight();
|
|
255 |
double h = (blockHeight * dataset.getExtent().height()) / dataset.getHeight(); |
|
255 | 256 |
Extent[] ext = new Extent[nPages]; |
256 | 257 |
|
257 | 258 |
double minX = datasetExtent.getMin().getX(); |
... | ... | |
282 | 283 |
private Buffer queryPage(int pag) throws RasterDriverException, ProcessInterruptedException, InvalidSetViewException { |
283 | 284 |
int w = maxX - minX + 1; |
284 | 285 |
int h = maxY - minY + 1; |
286 |
|
|
287 |
if((minX + w) > datasource.getWidth()) |
|
288 |
w = (int)(datasource.getWidth() - minX); |
|
289 |
|
|
285 | 290 |
if(bufWidth == 0 && bufHeight == 0) { |
286 | 291 |
if(pag == nPages - 1) |
287 |
query.setAreaOfInterest(minX, (RasterLibrary.blockHeight * pag) + minY, w, heightLastPage);
|
|
292 |
query.setAreaOfInterest(minX, (blockHeight * pag) + minY, w, heightLastPage); |
|
288 | 293 |
else |
289 |
query.setAreaOfInterest(minX, (RasterLibrary.blockHeight * pag) + minY, w, RasterLibrary.blockHeight);
|
|
294 |
query.setAreaOfInterest(minX, (blockHeight * pag) + minY, w, blockHeight);
|
|
290 | 295 |
} else { |
291 |
int hPage = (int)Math.round((RasterLibrary.blockHeight * h) / (double)bufHeight);
|
|
296 |
int hPage = (int)Math.round((blockHeight * h) / (double)bufHeight); |
|
292 | 297 |
if(pag == nPages - 1) { |
293 |
int hLastPage = (int)Math.round((heightLastPage * bufHeight) / (double)h); |
|
294 |
query.setAreaOfInterest(minX, (hPage * pag) + minY, w, hLastPage, bufWidth, heightLastPage); |
|
298 |
int hLastPage = 0; |
|
299 |
if(heightLastPage == bufHeight) { |
|
300 |
hLastPage = h; |
|
301 |
hPage = 0; |
|
302 |
} else |
|
303 |
hLastPage = (int)Math.round((heightLastPage * h) / (double)bufHeight); |
|
304 |
int newMiY = (hPage * pag) + minY; |
|
305 |
if((newMiY + hLastPage) > datasource.getHeight()) |
|
306 |
hLastPage = (int)(datasource.getHeight() - newMiY); |
|
307 |
query.setAreaOfInterest(minX, newMiY, w, hLastPage, bufWidth, heightLastPage); |
|
295 | 308 |
} else |
296 |
query.setAreaOfInterest(minX, (hPage * pag) + minY, w, hPage, bufWidth, RasterLibrary.blockHeight);
|
|
309 |
query.setAreaOfInterest(minX, (hPage * pag) + minY, w, hPage, bufWidth, blockHeight); |
|
297 | 310 |
} |
298 | 311 |
return datasource.query(query); |
299 | 312 |
} |
org.gvsig.raster/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreTransparency.java | ||
---|---|---|
134 | 134 |
|
135 | 135 |
//TODO: FUNCIONALIDAD: Falta asignar lo necesario para la transparencia por selecci?n |
136 | 136 |
this.transparencyRanges = (ArrayList<TransparencyRange>) t.getTransparencyRange().clone(); |
137 |
this.mask = t.getAlphaBand(); |
|
137 |
if(this.mask != null) |
|
138 |
this.mask = t.getAlphaBand(); |
|
138 | 139 |
this.opacity = t.getOpacity(); |
139 | 140 |
this.alphaBandNumber = t.alphaBandNumber; |
140 | 141 |
this.noData = (NoData)t.getNoData().clone(); |
141 |
this.originalData = t.originalData; |
|
142 |
if(this.originalData != null) |
|
143 |
this.originalData = t.originalData; |
|
142 | 144 |
this.transparencyActive = t.transparencyActive; |
143 | 145 |
} |
144 | 146 |
|
... | ... | |
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/tags/2.0.0/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/tags/2.0.0/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/tags/2.0.0/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreColorTable.java | ||
---|---|---|
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/tags/2.0.0/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.gdal/tags/2.0.0/org.gvsig.raster.gdal.io/src/main/java/org/gvsig/raster/gdal/io/GdalNative.java | ||
---|---|---|
1064 | 1064 |
if(lastblock > 0) |
1065 | 1065 |
nBlocks ++; |
1066 | 1066 |
int initYSrc = inputWindow[1]; |
1067 |
int stepYSrc = (buf.getBlockHeight() * inputWindow[3]) / buf.getHeight(); |
|
1068 |
int lastBlockYSrc = (lastblock * inputWindow[3]) / buf.getHeight(); |
|
1067 | 1069 |
int initYBuffer = 0; |
1068 | 1070 |
for (int i = 0; i < nBlocks; i++) { |
1069 | 1071 |
if(lastblock > 0 && i == (nBlocks - 1)) { |
1070 | 1072 |
int[] newStepBuffer = new int[]{0, initYBuffer, stepBuffer[2], initYBuffer + lastblock}; |
1073 |
int[] newWindow = new int[]{inputWindow[0], initYSrc, inputWindow[2], lastBlockYSrc}; |
|
1071 | 1074 |
readData(buf, |
1072 | 1075 |
bandList, |
1073 |
new int[]{inputWindow[0], initYSrc, inputWindow[2], lastblock},
|
|
1076 |
newWindow,
|
|
1074 | 1077 |
bufWidth, lastblock, 0, 0, newStepBuffer); |
1075 | 1078 |
} else { |
1076 | 1079 |
int[] newStepBuffer = new int[]{0, initYBuffer, stepBuffer[2], initYBuffer + buf.getBlockHeight()}; |
1080 |
int[] newWindow = new int[]{inputWindow[0], initYSrc, inputWindow[2], stepYSrc}; |
|
1077 | 1081 |
readData(buf, |
1078 | 1082 |
bandList, |
1079 |
new int[]{inputWindow[0], initYSrc, inputWindow[2], buf.getBlockHeight()},
|
|
1083 |
newWindow,
|
|
1080 | 1084 |
bufWidth, buf.getBlockHeight(), 0, 0, newStepBuffer); |
1081 |
initYSrc += buf.getBlockHeight();
|
|
1085 |
initYSrc += stepYSrc;
|
|
1082 | 1086 |
initYBuffer += buf.getBlockHeight(); |
1083 | 1087 |
} |
1084 | 1088 |
} |
Also available in: Unified diff