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

View differences:

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