0

サイズが 2.5MB の .png ファイルを開くと、アプリケーションがクラッシュします。このファイルは高解像度です。OOM エラーが発生しています。

エラーの原因となるコードは次のとおりです。

long sizeInMB = imageFile.length()/(1024*1024);
if(sizeInMB > 2){
    int inSampleSize = (int) (sizeInMB/5);
    if(sizeInMB%5 > 0){
        inSampleSize++;
    }
    Options opts = new Options();
    opts.inSampleSize=inSampleSize;
    bitmap = BitmapFactory.decodeFile(filePath, opts);    
}else{
    bitmap = BitmapFactory.decodeFile(filePath);
} 

bitmap = BitmapFactory.decodeFile(filePath)がエラーの原因です。

どんな助けでも大歓迎です、

前もって感謝します

4

2 に答える 2

2

あなたの場合、2MBのビットマップは約10MBのメモリを消費する可能性があるためです

大きなビットマップをロードする方法については、これを参照してください

于 2013-02-08T05:29:22.920 に答える
1

これを使用してみてください。問題が解決する場合があります。

Options opts = new Options(); 
  opts.inJustDecodeBounds = true; 
  BitmapFactory.decodeFile(path, opts); 
  Log.e("optwidth",opts.outWidth+""); 
  opts.inJustDecodeBounds = false; 
  if(opts.outWidth>500){ 
          opts.inSampleSize = 4; 
          mBitmap = BitmapFactory.decodeFile(path, opts); 
  } 
  else mBitmap = BitmapFactory.decodeFile(path, opts);

幅サイズのコードを追加しました。高さの要件に応じて追加することもできます。

詳細情報が必要な場合は、次のリンクを確認してください。大きなビットマップの処理

その他の推奨されるリンクは次のとおりです:アプリ内にアクセスするときのメモリ不足キャッシュ エラー

于 2013-02-08T06:22:54.410 に答える