diff --git a/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileDataSource.java b/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileDataSource.java index c5be6b74c..f9deca3c2 100644 --- a/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileDataSource.java +++ b/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileDataSource.java @@ -108,21 +108,22 @@ public void query(MapTile tile, ITileDataSink sink) { QueryResult res = QueryResult.FAILED; try { byte[] bytes = readTile(tile.tileX, tile.tileY, tile.zoomLevel); - - if (mTransparentColor != null || mAlpha != null) { - android.graphics.Bitmap androidBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); - if (mTransparentColor != null) - androidBitmap = processTransparentColor(androidBitmap, mTransparentColor); - if (mAlpha != null) - androidBitmap = processAlpha(androidBitmap, mAlpha); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - androidBitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, bos); - bytes = bos.toByteArray(); + if (bytes != null) { + if (mTransparentColor != null || mAlpha != null) { + android.graphics.Bitmap androidBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + if (mTransparentColor != null) + androidBitmap = processTransparentColor(androidBitmap, mTransparentColor); + if (mAlpha != null) + androidBitmap = processAlpha(androidBitmap, mAlpha); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + androidBitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, bos); + bytes = bos.toByteArray(); + } + + Bitmap bitmap = CanvasAdapter.decodeBitmap(new ByteArrayInputStream(bytes)); + sink.setTileImage(bitmap); + res = QueryResult.SUCCESS; } - - Bitmap bitmap = CanvasAdapter.decodeBitmap(new ByteArrayInputStream(bytes)); - sink.setTileImage(bitmap); - res = QueryResult.SUCCESS; } catch (Throwable t) { log.severe(t.toString()); } finally { diff --git a/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileSource.java b/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileSource.java index 90c177ec0..3156321b2 100644 --- a/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileSource.java +++ b/vtm-android/src/org/oscim/android/tiling/source/mbtiles/MBTilesBitmapTileSource.java @@ -40,4 +40,30 @@ public MBTilesBitmapTileSource(String path) { public MBTilesBitmapTileSource(String path, Integer alpha, Integer transparentColor) { super(new MBTilesBitmapTileDataSource(path, alpha, transparentColor)); } + + /** + * Create a tile source for MBTiles raster databases. + * + * @param path the path to the MBTiles database. + * @param overZoom allow over zooming to this level. + */ + public MBTilesBitmapTileSource(String path, int overZoom) { + this(path, null, null, overZoom); + } + + /** + * Create a tile source for MBTiles raster databases. + * + * @param path the path to the MBTiles database. + * @param alpha an optional alpha value [0-255] to make the tiles transparent. + * @param transparentColor an optional color that will be made transparent in the bitmap. + * @param overZoom allow over zooming to this level. + */ + public MBTilesBitmapTileSource(String path, Integer alpha, Integer transparentColor, int overZoom) { + super(new MBTilesBitmapTileDataSource(path, alpha, transparentColor)); + MBTilesTileDataSource ds = getDataSource(); + mZoomMin = ds.getMinZoom(); + mZoomMax = ds.getMaxZoom(); + mOverZoom = overZoom; + } } diff --git a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java index 14cbcdc15..65bd397ec 100644 --- a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java @@ -55,7 +55,7 @@ protected boolean loadTile(MapTile tile) { @Override public void setTileImage(Bitmap bitmap) { - if (isCanceled() || !mTile.state(LOADING)) { + if (mTile == null || isCanceled() || !mTile.state(LOADING)) { bitmap.recycle(); return; }