【问题标题】:Render a byte[] as Bitmap in Android在 Android 中将 byte[] 渲染为位图
【发布时间】:2011-08-30 11:48:01
【问题描述】:

我从 JNI 调用中获取一个字节数组,并尝试用它构造一个 Bitmap 对象。

我的问题是,下面的代码,返回null。

    byte[] image = services.getImageBuffer(1024, 600);
    Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);

有什么建议吗?

PS:像素布局是BGR,不是RGB。

【问题讨论】:

  • 你测试过图片字节数组是否包含正确的内容吗?否则你的代码在我看来没问题。
  • 是的,我做到了。内容没错,就是没看懂的decodeByteArray。

标签: java android


【解决方案1】:

文档说该方法返回“如果图像无法解码,则返回 null”。 你可以试试:

byte[] image = services.getImageBuffer(1024, 600);
InputStream is = new ByteArrayInputStream(image);
Bitmap bmp = BitmapFactory.decodeStream(is);

即使我不认为它会改变任何东西.. 尝试看看 android.graphics.BitmapFactory.Options 以及

【讨论】:

  • 同样的错误。并且选项不关心像素格式。
【解决方案2】:

decodeByteArray 确实不适用于这种格式。我手动从 BGR 更改为 RGB。

    byte[] image = services.getImageBuffer(1024, 600);

    Bitmap bmp = Bitmap.createBitmap(1024, 600, Bitmap.Config.RGB_565);
    int row = 0, col = 0;
    for (int i = 0; i < image.length; i += 3) {
        bmp.setPixel(col++, row, image[i + 2] & image[i + 1] & image[i]);

        if (col == 1024) {
            col = 0;
            row++;
        }

然而,

for (i < image.length) 。。。bmp.setPixel(image[i + 2] & image[i + 1] & image[i]); 

可能导致:

08-29 14:34:23.460: 错误/AndroidRuntime(8638): java.lang.ArrayIndexOutOfBoundsException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2010-12-19
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多