Android アプリでカメラから画像をデコードしようとすると、OutOfMemory 例外が継続的に発生します。この問題には多くの質問がありますが、私の場合は特に奇妙ですoptions.inJustDecodeBounds=true
。
カメラを起動するコードは次のとおりです。
protected void takePicture() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = new File(IMAGE_PATH, "camera.jpg");
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image));
startActivityForResult(takePictureIntent, 0);
}
例外をトリガーするコードは次のとおりです。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK ) {
String rawImageName = new String(IMAGE_PATH + "/camera.jpg");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(rawImageName); // The exception is thrown here
.
.
.
}
}
非常に高いサンプリング レートを使用して画像をデコードしようとしましたが、それでも同じ例外が発生します。
options.inSampleSize = 20;
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap photo = BitmapFactory.decodeFile(rawImageName); // Again the exception
それ以外は、アプリケーションは正しく動作しているようで、十分な空きメモリがあります。ギャラリーアプリで画像を正しく開くことができます。画像を別のディレクトリに移動しても解決しませんでした。何が原因でしょうか?でデコード中に例外が発生する原因は何inJustDecodeBounds = true
ですか?