我有文件"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.
首先,您应避免将原始图像存储或传输到手机; 最好将它们转换为PC上的压缩格式(如PNG或JPG),并将该图稿部署到设备上.
但是,如果由于某种不寻常的原因你真的想加载原始图像,这是一种方法:
1)创建一个包含图像的Bitmap.Config.RGB_565 位图.您必须知道原始图像的高度和宽度.
2)创建ByteBuffer足够大小以包含位图中的所有像素; 各扫描线的图像需要一个步幅的像素的量,这可以比图像的宽度以上.每条线上的额外填充是必要的.(有时候通过巧合的巧合,步幅与宽度相同 - 没有填充;这是不可靠的,总是考虑到你的偏差.)
使用ByteBuffers,了解读写偏移量非常重要.在写入ByteBuffer之后,您flip将读取这些字节.
3)将文件中的原始像素一次读入您的ByteBuffer一条扫描线,并在线条之间留出适当的步幅.
4)使用Bitmap.copyPixelsFromBuffer().
5)丢弃 ByteBuffer
| 归档时间: |
|
| 查看次数: |
8424 次 |
| 最近记录: |