我有一个序列为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/

10-10 08:32