Bitmap占用記憶體計算

圖片記憶體佔用計算方法

一張圖片佔用的記憶體由以下因素決定:

  • 圖片中的像素點個數
  • 每單位像素點佔用字節數

所以,一張圖片佔用的記憶體值為:

圖片長度 * 圖片寬度 * 單位像素點字節數

每單位像素點佔用字節數(byte):

ALPHA_8 1
ARGB_4444 2
ARGB_8888 4
RGB_565 2

舉例

一張RGB_565的圖片,長寬分別是1024 * 768,則:
1024 * 768 * 2 = 1572864 大約等於1.5Mb的記憶體佔用量

實際測試

1
2
3
4
5
6
7
8
9
10
11
Drawable drawable = img.getDrawable();
if (drawable instanceof BitmapDrawable)
{
BitmapDrawable bitDrawable = (BitmapDrawable) drawable;
Bitmap bit = bitDrawable.getBitmap();
int rowBytes = bit.getRowBytes();
int height = bit.getHeight();
Log.d("MYLOG","height: "+height+", width: "+bit.getWidth()+", rowBytes: "+rowBytes);
long memSize = rowBytes * height;
Log.d("MYLOG", "memSize = " + memSize + "B = " + formatFileSize(memSize)+"MB");
}

Result : D/ANDROID_LAB: memSize = 6460752B = 6.1614532470703125MB

這張圖是1916*843的圖,每一像素為4Byte,所以未經處理的圖片在Android系統中將會佔用6MB多的記憶體空間。

也就是說,浪費了6MB的空間,實際上只顯示了小小的一張圖在畫面,所以建議圖片顯示之前一定要先處理過圖片。

另外對圖片的處理,並非將KB數壓縮就能解決

舉例

以下三張圖片,實際放入imageView之後佔用的記憶體是相同的,並不會因為單純降低畫質而影響佔用記憶體大小

Q:100 DPI:300 Q:1 DPI:300 Q:1 DPI:30
文章目錄
  1. 1. 圖片記憶體佔用計算方法
    1. 1.1. 每單位像素點佔用字節數(byte):
    2. 1.2. 舉例
    3. 1.3. 實際測試
    4. 1.4. Result : D/ANDROID_LAB: memSize = 6460752B = 6.1614532470703125MB
      1. 1.4.1. 這張圖是1916*843的圖,每一像素為4Byte,所以未經處理的圖片在Android系統中將會佔用6MB多的記憶體空間。
    5. 1.5. 舉例
|