我有一个序列为0和-1(255)的byte
数组。这是使用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);
不幸的是,它返回空值。就像其他有关
BitmapFactory.decodeByteArray()
的问题一样。我已经测试了其他方法,例如嵌套循环,它可以工作,但是处理时间太长,特别是对于大图像。
这是我当前用于生成二进制化的
data
的内容:ptr = 0;
while (ptr < srcData.length)
{
monoData[ptr] = ((0xFF & srcData[ptr]) >= threshold) ? (byte) 255 : 0;
ptr ++;
}
希望您能引导我找到解决此问题的更好方法。谢谢!
最佳答案
565是每个像素使用2个字节的表示。
此外,decodeByteArray是一种读取压缩的byte []的方法(请参阅文档)。
这是我会做的:
使用int []而不是byte []。
初始化如下
将Bitmap.html#createBitmap()方法与int []一起使用。此时使用的配置并不十分重要。 monoData[ptr] = ((0xFF & srcData[ptr]) >= threshold) ? 0xffffffff : 0xff000000;
注意:可能可以帮助您的一件事:encodeByteArray不了解图像的几何形状,因此当然不能将其解码为您所期望的。
关于java - BitmapFactory.decodeByteArray()在二进制位图上返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12281964/