1

Android 的 Google Maps api v2 提供了一个可以添加 TileProviders 的 TileOverlay。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);
4

3 回答 3

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();
}

这应该可以解决问题;)

于 2013-06-19T22:11:50.647 回答
0

Tile#data应该是一种受支持的图像格式的压缩图像数据。换句话说,图像文件的原始内容。如果您已经有一个 decoded Bitmap,请使用Bitmap#compress(...)将其写入 a ByteArrayOutputStream,然后从中获取byte[]

于 2014-12-01T20:27:17.167 回答
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);
}
于 2018-11-30T15:01:04.050 回答