Revision 6514 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.googlemaps/org.gvsig.raster.googlemaps.provider/src/main/java/org/gvsig/raster/googlemaps/provider/GoogleMapsImage.java

View differences:

GoogleMapsImage.java
1 1
package org.gvsig.raster.googlemaps.provider;
2 2

  
3 3
import java.awt.image.BufferedImage;
4
import java.awt.image.DataBuffer;
5
import java.awt.image.Raster;
6
import java.awt.image.SampleModel;
7 4
import java.util.HashMap;
8 5
import java.util.Iterator;
9 6
import java.util.Map;
10 7
import java.util.Map.Entry;
11 8
import java.util.Set;
12 9

  
13
import org.cresques.cts.ICoordTrans;
14 10
import org.slf4j.Logger;
15 11
import org.slf4j.LoggerFactory;
16 12

  
17
import org.gvsig.fmap.crs.CRSFactory;
18 13
import org.gvsig.fmap.dal.DataStoreParameters;
19 14
import org.gvsig.fmap.dal.exception.DataException;
20 15
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
......
26 21
import org.gvsig.fmap.geom.exception.CreateGeometryException;
27 22
import org.gvsig.fmap.geom.primitive.Envelope;
28 23
import org.gvsig.fmap.geom.primitive.Point;
29
import org.gvsig.googlemaps.lib.api.GoogleMapsLibrary;
30 24
import org.gvsig.googlemaps.lib.api.GoogleMapsLocator;
31 25
import org.gvsig.googlemaps.lib.api.GoogleMapsManager;
32 26
import org.gvsig.googlemaps.lib.api.GoogleMapsRequest;
......
36 30
import org.gvsig.raster.lib.buffer.api.Band;
37 31
import org.gvsig.raster.lib.buffer.api.Buffer;
38 32
import org.gvsig.raster.lib.buffer.api.BufferLocator;
39
import org.gvsig.raster.lib.buffer.api.BufferManager;
40
import org.gvsig.raster.lib.buffer.api.NoData;
41 33
import org.gvsig.raster.lib.buffer.api.TileStruct;
42 34
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
43 35
import org.gvsig.tools.ToolsLocator;
......
63 55
    private GoogleMapsRasterProvider provider;
64 56

  
65 57
    /**
66
     * @param innerProvider
58
     * @param provider
67 59
     * @param query
68 60
     * @param tileStruct
69 61
     */
......
241 233

  
242 234
            downloaded = false;
243 235

  
244
            int imageType = img.getType();
245
            int bufferType;
246
            switch (imageType) {
247
            case BufferedImage.TYPE_3BYTE_BGR:
248
            case BufferedImage.TYPE_4BYTE_ABGR:
249
            case BufferedImage.TYPE_4BYTE_ABGR_PRE:
250
            case BufferedImage.TYPE_BYTE_BINARY:
251
            case BufferedImage.TYPE_BYTE_GRAY:
252
            case BufferedImage.TYPE_BYTE_INDEXED:
253
                bufferType = BufferManager.TYPE_BYTE;
254
                break;
255
            case BufferedImage.TYPE_INT_ARGB:
256
            case BufferedImage.TYPE_INT_ARGB_PRE:
257
            case BufferedImage.TYPE_INT_BGR:
258
            case BufferedImage.TYPE_INT_RGB:
259
                bufferType = BufferManager.TYPE_INT;
260
                break;
261
            case BufferedImage.TYPE_USHORT_555_RGB:
262
            case BufferedImage.TYPE_USHORT_565_RGB:
263
            case BufferedImage.TYPE_USHORT_GRAY:
264
                bufferType = BufferManager.TYPE_USHORT;
265
                break;
266
            default:
267
                bufferType = BufferManager.TYPE_UNDEFINED;
268
                break;
269
            }
270

  
271
            SampleModel sampleModel = img.getSampleModel();
272
            int bands = sampleModel.getNumBands();
273
            int[] bandDataTypes = new int[bands];
274
            NoData[] bandNoData = new NoData[bands];
275
            for (int i = 0; i < bandDataTypes.length; i++) {
276
                bandDataTypes[i] = bufferType;
277
                bandNoData[i] = null;
278
            }
279

  
280
            // FIXME: ?se hace as??
281
//            Raster raster = img.getData();
282 236
            try {
237

  
283 238
                this.buffer =
284
                    BufferLocator.getBufferManager().createBuffer(img.getHeight(), img.getWidth(), bandDataTypes,
285
                        bandNoData, GoogleMapsRasterProvider.GOOGLE_MAPS_PROJECTION, this.envelope, null);
239
                    BufferLocator.getBufferManager().createBuffer(img, GoogleMapsRasterProvider.GOOGLE_MAPS_PROJECTION,
240
                        this.envelope);
241

  
286 242
            } catch (LocatorException | BufferException e) {
287 243
                logger.warn("Can't create buffer to load downloaded image.", e);
288 244
            }
289 245

  
290
//            byte[] dataElements = (byte[]) raster.getDataElements(0, 0, img.getWidth(), img.getHeight(), null);
291
            // FIXME: For now img has only one band because format is default
292
            // (png)
293
//            Band band = this.buffer.getBand(0);
294
//            byte[] rowBuffer = (byte[]) band.createRowBuffer();
295
//            for (int row = 0; row < img.getHeight(); row++) {
296
//                System.arraycopy(dataElements, row * img.getWidth(), rowBuffer, 0, img.getWidth());
297
//                band.putRow(row, rowBuffer);
298
//            }
299
//
300

  
301
            Raster raster = img.getData();
302
            DataBuffer dataBuffer = raster.getDataBuffer();
303
            for (int i = 0; i < bands; i++) {
304
              Band band = this.buffer.getBand(i);
305
              byte[] rowBuffer = (byte[]) band.createRowBuffer();
306
              int[] intRowBuffer = new int[rowBuffer.length];
307
              for (int row = 0; row < img.getHeight(); row++) {
308
                  sampleModel.getSamples(0, row, img.getWidth(), 1, i, intRowBuffer, dataBuffer);
309
                  for(int c=0; c<rowBuffer.length; c++) {
310
                      rowBuffer[c] = (byte)intRowBuffer[c];
311
                  }
312
                  band.putRow(row, rowBuffer);
313
              }
314
//                  System.arraycopy(dataElements, row * img.getWidth(), rowBuffer, 0, img.getWidth());
315
//              }
316

  
317
            }
318

  
319 246
            this.downloaded = true;
320 247
            logger.info("Tile listo       : " + this.key);
321 248
            this.notify();

Also available in: Unified diff