0

我有一个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 ++;
}

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

4

1 回答 1

2

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

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

这是我要做的:

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

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

注意:可能对您有所帮助的一件事:decodeByteArray 不知道图像的几何形状,因此当然不能将其解码为您所期望的。

于 2012-09-05T13:07:48.947 回答