Android Bitmap 内存占用太多的问题


有时会发现由于内存不够而导致错误,大都来源于Image太大造成的。下面给出一个简单有效的方法:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。
有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。
查看Android源码,Android提供了一种动态计算的方法。
public static int computeSampleSize(BitmapFactory.Options options,         int minSideLength, int maxNumOfPixels) {   
int initialSize = computeInitialSampleSize(options, minSideLength,             maxNumOfPixels);    
int roundedSize;    
if (initialSize <= roundedSize){       
roundedSize = 1;        
while (roundedSize < initialSize) {            
roundedSize <<= 1;        
}    
} else {        
roundedSize = (initialSize + 7) / 8 * 8;    
}     
return roundedSize; }
private static int computeInitialSampleSize(BitmapFactory.Options options,         int minSideLength, int maxNumOfPixels) {   
double w = options.outWidth;    
double h = options.outHeight;     

  • 1
  • 2
  • 下一页

相关内容