Android 一張圖片BitMap佔用記憶體的計算
圖片大小的影響因素
android中大的圖片一般要經過壓縮才顯示,否則可能會發生OOM。
圖片所佔用的記憶體和圖片的寬度、長度、單位畫素佔的位元組數三個因素有關。
圖片色彩
我們都知道顏色經常用ARGB來表示,A表示Alpha,即透明度;R表示red,即紅色;G表示green,即綠色;B表示blue,即藍色。Bitmap的色彩也是用ARGB來表示的
Bitmap.Config
Bitmap.Config中有Bitmap.Config.ALPHA_8、Bitmap.Config.RGB_565、Bitmap.Config.ARGB_4444、Bitmap.Config.ARGB_8888有四個列舉變數。
Bitmap.Config.ALPHA_8表示:每個畫素佔8位,沒有色彩,只有透明度A-8,共8位。
Bitmap.Config.ARGB_4444表示:每個畫素佔16位,A-4,R-4,G-4,B-4,共4+4+4+4=16位。
Bitmap.Config.RGB_565表示:每個畫素佔16位,沒有透明度,R-5,G-6,B-5,共5+6+5=16位。
Bitmap.Config.ARGB_8888表示:每個畫素佔32位,A-8,R-8,G-8,B-8,共8+8+8+8=32位。
位數越高,那麼可儲存的顏色資訊越多,影象也就越逼真。
Bitmap記憶體計算
ARGB_8888是最佔記憶體的,因為一個畫素佔32位,8位=1位元組,所以一個畫素佔4位元組的記憶體。ARGB_4444的一個畫素佔2個位元組。RGB_565的一個畫素也是佔兩個位元組。ALPHA_8的一個畫素只佔一個位元組。
一個圖片的畫素=圖片寬度 × 圖片長度。
一張圖片(BitMap)佔用的記憶體=圖片寬度×圖片長度×單位畫素佔用的位元組數(圖片的畫素×單位畫素佔用的位元組數)
假設有一張480x800的圖片,四個格式下所佔的記憶體如下
型別 | 記憶體計算 | 佔記憶體大小(B | 佔記憶體大小(KB) |
---|---|---|---|
ARGB_8888 | 480×800×4 | 1536000 | 1536000÷1024=1500 |
ARGB_4444 | 480×800×2 | 768000 | 768000÷1024=750 |
ARGB_565 | 480×800×2 | 768000 | 768000÷1024=750 |
ARGB_8 | 480×800×1 | 384000 | 384000÷1024=375 |