web-dev-qa-db-ja.com

Androidでのメモリ効率の高い画像サイズ変更

私は、カメラから取得した画像のサイズ(つまり、約5〜8メガピクセル)をいくつかの小さいサイズ(最大は1024x768)に縮小しようとしています。次のコードを試しましたが、一貫してOutOfMemoryErrorを取得します。

Bitmap image = BitmapFactory.decodeStream(this.image, null, opt);
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();

// Constrain to given size but keep aspect ratio
float scaleFactor = Math.min(((float) width) / imgWidth, ((float) height) / imgHeight);

Matrix scale = new Matrix();
scale.postScale(scaleFactor, scaleFactor);
final Bitmap scaledImage = Bitmap.createBitmap(image, 0, 0, imgWidth, imgHeight, scale, false);

image.recycle();

OOMはcreateBitmapの間に発生するようです。これを行うためのよりメモリ効率の良い方法はありますか?おそらく、オリジナル全体をメモリにロードする必要がないものですか?

14
Sionide21

BitmapFactoryを使用してビットマップをデコードするときは、BitmapFactory.Optionsオブジェクトを渡し、inSampleSizeを指定します。これは、画像をデコードするときにメモリを節約するための最良の方法です。

サンプルコードは次のとおりです ビットマップオブジェクトに画像をロードする際のメモリ不足の問題

16
EboMike

アプリケーション内のカメラで写真を撮っていますか?その場合は、Android.hardware.Camera.Parameters.setPictureSizeを介してキャプチャするときに、最初に画像サイズを小さいサイズに設定する必要があります。

1
Mathias Conradt

これは私が答えた同様の質問であり、適切な画像サイズを動的にロードする方法を示しています。

メモリ不足の例外+ hprofファイルダンプの分析

0
toidiu