如何有效使用bitmap

2021-06-19 08:55:42 字數 1452 閱讀 2313

使用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...