如何在Android谷歌地图中制作自定义瓷砖

时间:2013-06-19 22:09:23

标签: java android google-maps-android-api-2

Android的Google Maps api v2提供了TileOverlay,可以添加TileProviders。给定lat,long和depth,TileProvider将生成Tile对象。为了制作瓷砖,必须给它宽度(简单),高度(简单)和表示为字节数组的图像(使我感到困惑)。如果我想“绘制”一个简单的对象,然后将其转换为字节数组,我该怎么做?

例如,我正在寻找看起来像

的东西
Canvas canvas = new canvas();
...
canvas.drawRect(); //Or something like this (just an example)
...
byte[] bytes = canvas.SomeConversionFunctionOrProcessThatIDontKnow();
return new Tile(1,1,bytes);

3 个答案:

答案 0 :(得分:2)

public byte[] getByteArray (String image) throws IOException {
 File yourImg = new File(image);
 BufferedImage bufferedImage = ImageIO.read(yourImg);
 WritableRaster wRaster = bufferedImage .getRaster();
 DataBufferByte data   = (DataBufferByte) wRaster.getDataBuffer();

 return data.getData();
}

这应该可以解决问题; )

答案 1 :(得分:0)

Tile#data应该是supported image formats之一的压缩图像数据。换句话说,图像文件的原始内容。如果您已经解码Bitmap,请使用Bitmap#compress(...)将其写入ByteArrayOutputStream,然后从中获取byte[]

答案 2 :(得分:0)

Bitmap bitmap = Bitmap.createBitmap(TILE_DIMENSION, TILE_DIMENSION,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
......
//draw something
......
Tile tile = convertBitmap(bitmap);
bitmap.recycle();
return tile;
}

private Tile convertBitmap(Bitmap bitmap){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] bitmapData = stream.toByteArray();

    return new Tile(TILE_DIMENSION, TILE_DIMENSION, bitmapData);
}
相关问题