1

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ですか?

4

2 に答える 2

10

オプションをデコード呼び出しに渡す必要があります。

BitmapFactory.decodeFile(rawImageName, options);
于 2013-01-15T10:02:03.023 に答える
2
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = 4; // 1/4
o2.inPurgeable = true;
Bitmap b=BitmapFactory.decodeFile(imagePath,o2);

これを試して。また、使用後に画像のサイズを変更し、ビットマップ オブジェクトを null にします。Give call to System.gc();it は gc を呼び出しますが、ヒントは与えます。また、多くのビットマップ オブジェクトを作成しないでください。同じビットマップ オブジェクトを再利用し、使用後に null にします。

于 2013-01-15T10:16:47.403 に答える