使用bitmap容易遭遇out of memory exception,主要由以下三個原因:
bitmap比較耗費記憶體,例如1300w畫素,每個畫素可能佔4個位元組;
有些view group例如list view,grid view中可能包含很多bitmap。
綜上,使用bitmap時主要考慮節省記憶體,方式主要是減小bitmap的大小,因為ui上的image view往往不是太大,所以可以縮小bitmap,
(另外,當你從檔案,硬碟,網路上decode時,不要在ui thread執行,可以放在async task中)
/* get the size of the imageview */
int targetw = mimageview.getwidth();
int targeth = mimageview.getheight();
/* get the size of the image */
bitmapfactory.options bmoptions = new bitmapfactory.options();
//設定bitmapfactory.option中的這個選項為true,這樣在decode的時候會暫不分配記憶體,只會拿到原來的大小
bmoptions.injustdecodebounds = true;
//有一系列的decode方法,用來從不同的源decode出,decodefile是從檔案中decode出
bitmapfactory.decodefile(mcurrentphotopath, bmoptions);
int photow = bmoptions.outwidth;
int photoh = bmoptions.outheight;
//根據大小和image view的確定縮小比例
int scalefactor = 1;
if ((targetw > 0) || (targeth > 0))
/* set bitmap options to scale the image decode target */
bmoptions.injustdecodebounds = false;//把這個值設定為false重新decode,這樣會真正分配記憶體
bmoptions.insamplesize = scalefactor;//縮小比例,如果為2,那長寬都變成原來的一半,面積是原來1/4
Bitmap使用分享
這篇文章裡面只是想總結一下工作中使用bitmap遇到的一些使用情況。bitmap翻譯過來就是 位圖 對於bitmap更多的優化問題吧!bitmap類有乙個方法recycle 從方法名可以看出是 的意思。雖然有gc,但是有時候 還是不盡如人意,這時候我們就需要用到recycle 我們手動來釋放bitm...
bitmap與2 bitmap使用總結
bitmap是一種簡單的資料結構,但在儲存空間壓縮方面卻使用廣泛。bitmap就是用乙個bit位來標記某個元素是否存在 1表示存在,0表示不存在 而2 bitmap就是用兩個bit為來標記某個元素出現的次數 00出現0次,01出現1次,10出現2次及其以上,11無意義。2 bitmap在記憶體中的表...
如何高效載入bitmap
對於如何高效載入bitmap,就是採用bitmapfactory.options來載入所需的大小。通過bitmapfactory.options來對進行縮放,主要利用其insamplesize引數,即取樣率。獲取取樣率的步驟一般如下 1 將bitmapfactory.options的injustde...