4

簡単な例:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = scale;
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts);

scale2 の累乗に等しくない値を渡すと、ビットマップは最も近い 2 の累乗値でスケーリングされます。たとえば、scale = 3実際のスケールが2何らかの理由で変わる場合。ハードウェア アクセラレーションを使用しているためでしょうか。

とにかく、完全なビットマップのメモリを割り当てずに、2 のべき乗以外の値でビットマップをスケーリングするにはどうすればよいですか?

PS 2 の累乗を使用する方がはるかに高速であることはわかっていますが、私の場合、時間はそれほど重要ではなく、提供されたスケールで正確にスケーリングされた画像が必要です(そうしないと、画像が大きすぎたり小さすぎたりします) - 画像処理を使用しています、したがって、大きな画像自体はそれほど問題ではありません(ImageView必要なサイズにスケーリングします)が、たとえばフィルターを適用するには余分な時間がかかります。

4

1 に答える 1

2

次のドキュメントを読んだ場合inSampleSize

注:デコーダーはこの要求を実行しようとしますが、結果のビットマップは、要求されたものと正確に異なる次元を持つ場合があります。また、2の累乗は、多くの場合、デコーダーが尊重する方が高速で簡単です。

正確な寸法は保証されません。メモリが問題のように聞こえるので、現在の方法を使用して、画像を必要なサイズよりも大きくしますが、ソース画像よりもメモリ要件に適した方法を使用します。次に、別の方法を使用Bitmap.createScaledBitmapして、正確な寸法にします。

于 2012-09-06T17:10:32.377 に答える