如何将RGB565缓冲区加载到ImageView

时间:2010-10-18 05:27:10

标签: android imageview

我有文件“Image_RGB565.raw”,其中包含RGB565格式的图像缓冲区。我希望这个图像显示在ImageView中。没有额外的转换为RGB888的代码是否可能?

我试过

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeFile("Image_001_RGB565.raw");

但位图为空。

然后我也尝试使用bytearray加载

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeFile(decodeByteArray(data, 0, data.length, opt);

请指导我改正方向。我的图片尺寸为160x160。

2 个答案:

答案 0 :(得分:6)

首先,您应避免将原始图像存储或传输到手机;最好将它们转换为PC上的压缩格式,如PNG或JPG,并将该图稿部署到设备上。

但是,如果由于某种不寻常的原因你真的想加载原始图像,这是一种方法:

1)创建一个Bitmap.Config.RGB_565 bitmap来包含您的图片。您必须知道原始图像的高度和宽度。

2)创建一个足够大小的ByteBuffer来包含位图中的所有像素;图像的每个扫描线采用 stride 像素量,这可能超过图像的宽度。每条线上的额外填充是必要的。 (有时候,通过巧合,步幅与宽度相同 - 没有填充;这是不可靠的,总是考虑到步幅,你的补偿。)

使用ByteBuffers,了解读写偏移量非常重要。在您写入ByteBuffer之后,您flip将其读取这些字节。

3)将文件中的原始像素读入您的ByteBuffer,一次扫描一条扫描线,并在线之间留出适当的步幅。

4)使用Bitmap.copyPixelsFromBuffer()

5)弃掉ByteBuffer

答案 1 :(得分:2)

我是这样做的,而且很有效。

位图位图= Bitmap.createBitmap(captureWidth,captureHeight,Bitmap.Config.RGB_565);

ByteBuffer buffer = ByteBuffer.wrap(data);

bitmap.copyPixelsFromBuffer(缓冲液);