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/provider/tile/BaseTileDownloader.java
BaseTileDownloader.java | ||
---|---|---|
22 | 22 |
package org.gvsig.raster.impl.provider.tile; |
23 | 23 |
|
24 | 24 |
import java.awt.Graphics; |
25 |
import java.awt.color.ColorSpace; |
|
26 | 25 |
import java.awt.geom.AffineTransform; |
27 | 26 |
import java.awt.image.BufferedImage; |
28 | 27 |
import java.io.IOException; |
... | ... | |
96 | 95 |
if(RasterDefaultImplLibrary.downloadingImg == null) |
97 | 96 |
return null; |
98 | 97 |
String key = w + "X" + h + "_Downloading"; |
99 |
return getBufferFromImageIcon(w, h, key, RasterDefaultImplLibrary.downloadingImg);
|
|
98 |
return new Object[]{getBufferFromImageIcon(w, h, key, RasterDefaultImplLibrary.downloadingImg)};
|
|
100 | 99 |
} |
101 | 100 |
|
102 | 101 |
/** |
... | ... | |
107 | 106 |
if(RasterDefaultImplLibrary.crashImg == null) |
108 | 107 |
return null; |
109 | 108 |
String key = w + "X" + h + "_Crash"; |
110 |
return getBufferFromImageIcon(w, h, key, RasterDefaultImplLibrary.crashImg);
|
|
109 |
return new Object[]{getBufferFromImageIcon(w, h, key, RasterDefaultImplLibrary.crashImg)};
|
|
111 | 110 |
} |
112 | 111 |
|
113 |
private Buffer[] getBufferFromImageIcon(int w, int h, String key, ImageIcon icon) {
|
|
112 |
private Buffer getBufferFromImageIcon(int w, int h, String key, ImageIcon icon) { |
|
114 | 113 |
Buffer buf = RasterDefaultImplLibrary.defaultImages.get(key); |
115 |
Buffer alpha = RasterDefaultImplLibrary.defaultImages.get(key + "_Alpha"); |
|
116 | 114 |
if(buf == null) { |
117 | 115 |
try { |
118 |
BufferParam par = RasterLocator.getManager().getBufferFactory().createBufferParams(w, h, 3, Buffer.TYPE_BYTE, true);
|
|
116 |
BufferParam par = RasterLocator.getManager().getBufferFactory().createBufferParams(w, h, 4, Buffer.TYPE_BYTE, true);
|
|
119 | 117 |
buf = RasterLocator.getManager().getBufferFactory().createBuffer(par); |
120 |
|
|
121 |
BufferParam parAlpha = RasterLocator.getManager().getBufferFactory().createBufferParams(w, h, 1, Buffer.TYPE_BYTE, true); |
|
122 |
alpha = RasterLocator.getManager().getBufferFactory().createBuffer(parAlpha); |
|
123 | 118 |
} catch (LocatorException e) { |
124 | 119 |
log.debug("Error creating buffers ", e); |
125 | 120 |
} catch (BufferCreationException e) { |
126 | 121 |
log.debug("Error creating buffers ", e); |
127 | 122 |
} |
128 | 123 |
|
129 |
byte[] background = new byte[]{-1, -1, -1}; |
|
124 |
byte[] background = new byte[]{-1, -1, -1, (byte)50};
|
|
130 | 125 |
for (int i = 0; i < buf.getHeight(); i++) |
131 |
for (int j = 0; j < buf.getWidth(); j++) {
|
|
126 |
for (int j = 0; j < buf.getWidth(); j++) |
|
132 | 127 |
buf.setElemByte(j, i, background); |
133 |
alpha.setElem(j, i, 0, (byte)50); |
|
134 |
} |
|
135 | 128 |
|
136 |
BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), ColorSpace.TYPE_RGB);
|
|
129 |
BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
|
|
137 | 130 |
Graphics g = img.createGraphics(); |
138 | 131 |
g.drawImage(icon.getImage(), 0, 0, null); |
139 | 132 |
int initX = (w / 2) - (img.getWidth() / 2); |
... | ... | |
144 | 137 |
buf.setElem(i, j, 0, (byte)((value & 0x00ff0000) >> 16)); |
145 | 138 |
buf.setElem(i, j, 1, (byte)((value & 0x0000ff00) >> 8)); |
146 | 139 |
buf.setElem(i, j, 2, (byte)(value & 0x000000ff)); |
140 |
buf.setElem(i, j, 3, (byte)((value & 0xff000000) >> 24)); |
|
147 | 141 |
} |
148 | 142 |
} |
149 | 143 |
RasterDefaultImplLibrary.defaultImages.put(key, buf); |
150 |
RasterDefaultImplLibrary.defaultImages.put(key + "_Alpha", buf); |
|
151 | 144 |
} |
152 |
return new Buffer[]{buf, alpha};
|
|
145 |
return buf;
|
|
153 | 146 |
} |
154 | 147 |
|
155 | 148 |
/** |
... | ... | |
203 | 196 |
q.setDrawableBands(bandList.getDrawableBands()); |
204 | 197 |
Buffer buf = tileStore.query(q); |
205 | 198 |
|
206 |
if(tileStore.getTransparency().getAlphaBandNumber() >= 0) { |
|
207 |
//Lee la banda de transparencia para eliminar la zona del tile que est? fuera de la imagen |
|
208 |
q = RasterLocator.getManager().createQuery(); |
|
209 |
q.setDrawableBands(new int[]{tileStore.getBandCount() - 1});//.setBandList(newBandList); |
|
210 |
Buffer transparency = tileStore.query(q); |
|
211 |
|
|
212 |
tile.setData(new Object[]{buf, transparency, null}); |
|
213 |
} else |
|
214 |
tile.setData(new Object[]{buf, null, tileStore.getColorTable()}); |
|
199 |
tile.setData(new Object[]{buf, null, tileStore.getColorTable()}); |
|
215 | 200 |
|
216 | 201 |
buf.setDataExtent(tileStore.getExtent().toRectangle2D()); |
217 | 202 |
tileStore.close(); |
Also available in: Unified diff