【问题标题】:How to load RGB565 buffer to ImageView如何将 RGB565 缓冲区加载到 ImageView
【发布时间】:2010-10-18 05:27:10
【问题描述】:

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

我试过了

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

但位图为空。

然后我也尝试使用 bytearray 加载

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

请指导我正确的方向。我的图片尺寸是 160x160。

【问题讨论】:

    标签: android imageview


    【解决方案1】:

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

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

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

    2) 创建一个ByteBuffer,其大小足以包含位图中的所有像素;图像的每条 扫描线 采用 stride 数量的像素,这可能大于图像的宽度。每行上的这个额外的填充是必要的。 (有时巧合的是,步幅与宽度相同 - 没有填充;这不能依赖,始终在考虑步幅的情况下进行偏移。)

    对于 ByteBuffers,了解读写偏移量很重要。写入 ByteBuffer 后,您 flip 它会读取这些字节。

    3) 将文件中的原始像素读取到您的ByteBuffer 中,一次一条扫描线,行与行之间的步距适当。

    4) 使用Bitmap.copyPixelsFromBuffer()

    5) 丢弃ByteBuffer

    【讨论】:

    • 您好 Will,我能够按照您的建议显示图像。非常感谢。
    • @JRC 乐于助人;勾选已接受的答案并给我一些分数!
    • 超级有帮助。感谢您提供详细信息!
    【解决方案2】:

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

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

    ByteBuffer 缓冲区 = ByteBuffer.wrap(data);

    bitmap.copyPixelsFromBuffer(缓冲区);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多