Android中圖片佔用內存計算

轉自:http://blog.163.com/hero_213/blog/static/39891214201412621834253/

Android中有四種,分別是:

ALPHA_8:每個像素佔用1byte內存

ARGB_4444:每個像素佔用2byte內存

ARGB_8888:每個像素佔用4byte內存

RGB_565:每個像素佔用2byte內存

Android默認的顏色模式爲ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,佔用的內存也最大。


舉例說明一個32位的PNG也就是ARGB_8888,像素是1204*1024,那麼佔用空間是:

1024*1024*(32/8)

因爲8bit = 1 byte, 32位就是4byte. 我們在解析圖片的時候爲了方式oom最好使用ARGB_4444模式. 節省一半的內存空間.


===================================================================


 Android中一張圖片(BitMap)佔用的內存主要和以下幾個因數有關:圖片長度,圖片寬度,單位像素佔用的字節數。
一張圖片(BitMap)佔用的內存=圖片長度*圖片寬度*單位像素佔用的字節數
圖片長度和圖片寬度的單位是像素。
圖片(BitMap)佔用的內存應該和屏幕密度(Density)無關,雖然我暫時還拿不出直接證據。
   創建一個BitMap時,其單位像素佔用的字節數由其參數BitmapFactory.OptionsinPreferredConfig變量決定。
inPreferredConfig爲Bitmap.Config類型,
Bitmap.Config是個枚舉類型,它可以爲以下值

ARGB指的是一種色彩模式,裏面A代表Alpha,R表示redG表示greenB表示blue,其實所有的可見色都是紅綠藍組成的,所以紅綠藍又稱爲三原色。
A  R  G  B
透明度 紅色 綠色 藍色

需要注意這裏的圖片佔用內存是指在Navtive中佔用的內存,當然BitMap使用的絕大多數內存就是該內存。
因爲我們可以簡單的認爲它就是BitMap所佔用的內存。
  Bitmap對象在不使用時,我們應該先調用recycle(),然後才它設置爲null.
雖然Bitmap在被回收時可以通過BitmapFinalizer來回收內存。但是調用recycle()是一個良好的習慣
在Android4.0之前,Bitmap的內存是分配在Native堆中,調用recycle()可以立即釋放Native內存。
從Android4.0開始,Bitmap的內存就是分配在dalvik堆中,即JAVA堆中的,調用recycle()並不能立即釋放Native內存。但是調用recycle()也是一個良好的習慣。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章