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[]值。非常感谢!:)