Java BitmapFactory.decodeByteArray()在二进制位图上返回null

Java BitmapFactory.decodeByteArray()在二进制位图上返回null,java,android,null,Java,Android,Null,我有一个字节数组,序列为0和-1(255)。这是使用大津算法进行二值化的结果。我用过: 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和-1(255)。这是使用大津算法进行二值化的结果。我用过:

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循环,它可以工作,但处理时间太长,特别是对于大型图像

这就是我当前用来生成二值化
数据的内容:

ptr = 0;
while (ptr < srcData.length)
{
    monoData[ptr] = ((0xFF & srcData[ptr]) >= threshold) ? (byte) 255 : 0;
    ptr ++;
}
ptr=0;
while(ptr=阈值)?(字节)255:0;
ptr++;
}

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

565是一种每像素使用2字节的表示

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

下面是我要做的:

  • 使用整型[]而不是字节[]
  • 初始化如下
  • 使用具有int[]结果的方法。此时使用的配置并不重要

monoData[ptr]=((0xFF&srcData[ptr])>=阈值)?0xFFFFFF:0xff000000;


注:有一件事可以帮助您:DecodeBytarray不知道图像的几何结构,因此当然无法将其解码到您期望的程度。

+1但最好尽可能使用
RGB565
,而不是
argb888
,因为它将图像的内存大小减半。(在不需要alpha时使用。)@njzk2是否有相反的方法可以将灰度位图转换为
int[]
?谢谢你,你应该使用Bitmap.getPixels,传递一个大小合适的int[]值。非常感谢!:)