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 的内存

参考this on how to load large bitmaps

于 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);

我已经添加了宽度大小的代码,您也可以根据您对高度的要求添加。

如果您想了解更多信息,请查看此链接,它将对您有所帮助:处理大型位图

其他建议的链接在这里:Out of memory cache error when access inside the app

于 2013-02-08T06:22:54.410 回答