0

ビットマップをバイトに変換した後、再びビットマップを生成しますが、ビットマップのサイズは元のサイズと生成されたサイズによって異なります。なぜですか。

元のビットマップ幅:284高さ:139

ビットマップサンプルサイズ係数:2

変換された画像の幅:142高さ:69

変換するには、以下のコードを使用しました:

 BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
        bitmapOptions.inSampleSize = powerOf2;
        bitmapOptions.inPurgeable = true;
        bitmapOptions.inInputShareable = true;
bmp = BitmapFactory.decodeByteArray(imgRawBytes, 0, imgRawBytes.length,
                        bitmapOptions);
4

1 に答える 1

0

を設定しているので、これは予想される動作ですbitmapOptions.inSampleSize = 2。実際、ドキュメントで指摘されているように、の場合inSampeSize > 1、デコーダーは元の画像をサブサンプリングします。

ドキュメントから:

値>1に設定されている場合、元の画像をサブサンプリングするようデコーダーに要求し、メモリを節約するために小さい画像を返します。サンプルサイズは、デコードされたビットマップの1つのピクセルに対応するいずれかの次元のピクセル数です。たとえば、inSampleSize == 4は、元の画像の幅/高さの1/4、ピクセル数の1/16の画像を返します。1未満の値は1と同じように扱われます。注:デコーダーはこの要求を実行しようとしますが、結果のビットマップは、要求されたものと正確に異なる次元を持つ場合があります。また、2の累乗は、多くの場合、デコーダーが尊重する方が高速で簡単です。

于 2012-07-10T12:09:32.993 に答える