0

byte一連の0と-1(255)の配列があります。これは、大津アルゴリズムを使用した2値化の結果です。私が使用した:

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は、圧縮されたbyte []を読み取るメソッドです(ドキュメントを参照)。

これが私がすることです:

  • byte[]ではなくint[]を使用してください。
  • 次のように初期化します
  • Bitmap.html#createBitmap()メソッドを使用して、int[]を生成します。使用される構成は、現時点ではそれほど重要ではありません。

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

nota:あなたを助けたかもしれない1つのこと:decodeByteArrayはあなたの画像の幾何学を知ら​​ないので、もちろんあなたが期待するものにそれをデコードすることはできません。

于 2012-09-05T13:07:48.947 に答える