使用android提供的bitmapfactory解碼時,往往會因為過大而遇到
outofmemoryerror的異常。
要想正常使用,一種簡便的方式是分配更少的記憶體空間來儲存,即在載入的時候以犧牲質量為代價,將進行放縮,這是一種避免oom所採用的解決方法。但是,這種方法是得不償失的,
犧牲了質量。
在bitmapfactory中有乙個內部類
bitmapfactory.options,其中值得我們注意的是
insamplesize和
injustdecodebounds兩個屬性:
insamplesize是以2的指數的倒數被進行放縮
injustdecodebounds為boolean型
設定injustdecodebounds為true後,decodefile並不分配空間,但可計算出原始的長度和寬度,即options.outwidth和options.outheight。
要對進行縮放,最大的問題就是怎麼在執行時動態的改變insamplesize的值,通過上面的
injustdecodebounds可以知道原始的大小,那麼這樣以來就可以通過演算法來得到乙個
恰當的insamplesize值。其動態演算法可參考下面的,網上也很多,大體都一樣:
有了上面的演算法,我們就可以輕易的get到bitmap了:
/*** get bitmap
* * @param imgfile
* @param minsidelength
* @param maxnumofpixels
* @return
*/public static bitmap trygetbitmap(string imgfile, int minsidelength,
int maxnumofpixels) catch (outofmemoryerror err)
} catch (exception e)
}
android記憶體優化 Bitmap
眾說周知在android開發中bitmap是吃記憶體的大戶,所以談到android記憶體優化首先得對bitmap進行優化 優化方法主要有 1 對於無用的bitmap要及時進行 釋放bitmap的方法 if bitmap null bitmap.isrecycled bitmap.recycle 方法...
Bitmap效能優化問題
倒影的 public static bitmap createreflectionimagewithorigin bitmap bitmap 縮放問題 public static drawable zoomdrawable drawable drawable,int w,int h 縮放方法二 im...
記bitmap記憶體優化
減小bitmap佔記憶體大小的方案有兩種 1,options.insamplesize 設定取樣率的值,原理是等比縮放寬高。縮放多少倍bitmap的記憶體大小占用久縮放多少倍。2.options.inpreferredconfig bitmap.config.rgb 565 設定位深,也可以說是設定...