私は、カメラから取得した画像のサイズ(つまり、約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
の間に発生するようです。これを行うためのよりメモリ効率の良い方法はありますか?おそらく、オリジナル全体をメモリにロードする必要がないものですか?
BitmapFactoryを使用してビットマップをデコードするときは、BitmapFactory.Optionsオブジェクトを渡し、inSampleSizeを指定します。これは、画像をデコードするときにメモリを節約するための最良の方法です。
サンプルコードは次のとおりです ビットマップオブジェクトに画像をロードする際のメモリ不足の問題
アプリケーション内のカメラで写真を撮っていますか?その場合は、Android.hardware.Camera.Parameters.setPictureSize
を介してキャプチャするときに、最初に画像サイズを小さいサイズに設定する必要があります。
これは私が答えた同様の質問であり、適切な画像サイズを動的にロードする方法を示しています。