BitmapFactory.decodeByteArray()在二进制化的Bitmap上返回null

时间:2012-09-05 12:57:10

标签: java android null

我有一个byte数组,系列为0和-1(255)。这是使用Otsu算法进行二值化的结果。我用过:

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDither = true;
opt.inPreferredConfig = Bitmap.Config.RGB_565; // I have tried ARGB_8888 aswell

Bitmap out = BitmapFactory.decodeByteArray(data, 0, data.length, opt);

不幸的是,它返回null。就像关于BitmapFactory.decodeByteArray()的其他问题一样。

我已经测试了其他方法,比如嵌套for循环,它可以工作,但处理时间太长,特别是对于大型图像。

这是我目前用于生成二值化data

的内容
ptr = 0;
while (ptr < srcData.length)
{
    monoData[ptr] = ((0xFF & srcData[ptr]) >= threshold) ? (byte) 255 : 0;
    ptr ++;
}

我希望你能引导我找到解决这个问题的更好方法。谢谢!

1 个答案:

答案 0 :(得分:2)

565是每像素使用2个字节的表示。

此外,decodeByteArray是一个读取压缩字节[]的方法(参见文档)。

以下是我要做的事情:

  • 使用int []而不是byte []。
  • 初始化如下
  • 使用Bitmap.html#createBitmap()方法生成int []。此时使用的配置并不重要。

monoData[ptr] = ((0xFF & srcData[ptr]) >= threshold) ? 0xffffffff : 0xff000000;

nota:有一件事可以帮助你:decodeByteArray不知道你的图像的几何形状,因此当然不能将它解码为你所期望的。

相关问题