圖片記憶體佔用計算方法

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

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

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

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

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

ALPHA_8 1
ARGB_4444 2
ARGB_8888 4
RGB_565 2

舉例

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

實際測試

    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

results matching ""

    No results matching ""