アプリケーションに保存ボタンのある画像ビューがあります。保存ボタンをクリックすると、ユーザーがデバイスの外部デバイスに保存する画像のサイズを選択すると、アプリはいくつかのサイズを表示します。いくつかの(低い)サイズでは正常に機能しますが、大きなサイズでは強制的に閉じます。私は例外からメモリに直面しています。画質は落としたくない。
これで誰か助けてください
アプリケーションに保存ボタンのある画像ビューがあります。保存ボタンをクリックすると、ユーザーがデバイスの外部デバイスに保存する画像のサイズを選択すると、アプリはいくつかのサイズを表示します。いくつかの(低い)サイズでは正常に機能しますが、大きなサイズでは強制的に閉じます。私は例外からメモリに直面しています。画質は落としたくない。
これで誰か助けてください
BitmapFactory.Optionsを使用して、以下のように oom エラーなしで画像を保存します。
final int DESIRED_WIDTH = 640;
// Set inJustDecodeBounds to get the current size of the image; does not
// return a Bitmap
final BitmapFactory.Options sizeOptions = new BitmapFactory.Options();
sizeOptions.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(data, 0, data.length, sizeOptions);
Log.d(TAG, "Bitmap is " + sizeOptions.outWidth + "x"
+ sizeOptions.outHeight);
// Now use the size to determine the ratio you want to shrink it
final float widthSampling = sizeOptions.outWidth / DESIRED_WIDTH;
sizeOptions.inJustDecodeBounds = false;
// Note this drops the fractional portion, making it smaller
sizeOptions.inSampleSize = (int) widthSampling;
Log.d(TAG, "Sample size = " + sizeOptions.inSampleSize);
// Scale by the smallest amount so that image is at least the desired
// size in each direction
final Bitmap result = BitmapFactory.decodeByteArray(data, 0, data.length,
sizeOptions);