Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大小大于2.3MB的png文件的OOM错误_Java_Android_Bitmap - Fatal编程技术网

Java 大小大于2.3MB的png文件的OOM错误

Java 大小大于2.3MB的png文件的OOM错误,java,android,bitmap,Java,Android,Bitmap,我的应用程序在打开一个大小为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 = ne

我的应用程序在打开一个大小为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)
导致错误

任何帮助都将不胜感激


提前感谢您,因为在您的情况下,2MB位图可能需要大约10MB的内存


请参阅如何加载大型位图,因为在您的情况下,2MB位图可能需要大约10MB的内存


请参阅如何加载大型位图

尝试使用此选项可能会解决您的问题

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);
我已经为宽度尺寸添加了代码,您也可以根据您的高度要求添加

如果您想了解更多信息,请查看此链接,它将帮助您:


其他建议的链接在这里:

尝试使用此链接可能会解决您的问题

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);
我已经为宽度尺寸添加了代码,您也可以根据您的高度要求添加

如果您想了解更多信息,请查看此链接,它将帮助您:


其他建议的链接如下:

如果
位图=BitmapFactory.decodeFile(文件路径)
导致错误,似乎有些地方出了问题,因为应该执行另一个If分支(
位图=BitmapFactory.decodeFile(文件路径,选项);
),不是吗?如果
位图=BitmapFactory.decodeFile(文件路径)
导致错误似乎出了问题,因为应该执行另一个if分支(
bitmap=BitmapFactory.decodeFile(filePath,opts);
),不是吗?