歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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;     

Copyright © Linux教程網 All Rights Reserved