『壹』 一張圖片佔用多少內存
https://www.cnblogs.com/popfisher/p/6959106.html
https://www.cnblogs.com/dasusu/p/9789389.html
(以上兩篇博客很不錯)
我們先假設我們有一張圖片時 600 * 800 的,圖片佔用空間大小假設是 100KB 。
圖片內存大小跟佔用空間大小有什麼關系?
佔用空間的大小不是圖片佔用內存的大小,一些初學者可能會誤解一下。佔用空間是在磁碟上佔用的空間,內存大小是載入到內存中佔用的內存大小。兩個只是單位是一樣的,本質不是一個概念。
一張圖片到底佔用多少內存呢?
1. 圖片佔用內存的計算公式: 圖片高度 * 圖片寬度 * 一個像素佔用的內存大小
2. 所以上面的圖片佔用內存是: 800 * 600 * 4 byte = 1875KB = 1.83M
當圖片放在 res 內的不同目錄中時,為什麼最終圖片載入進內存所佔據的大小會不一樣呢?
如果你們去看下Bitmap.decodeResource()源碼,你們會發現,系統在載入 res 目錄下的資源圖片時,會根據圖片存放的不同目錄做一次解析度的轉換,而轉換的規則是:
新圖的高度 = 原圖高度 * (設備的 dpi / 目錄對應的 dpi )
新圖的寬度 = 原圖寬度 * (設備的 dpi / 目錄對應的 dpi )
目錄名稱與 dpi 的對應關系如下,drawable 沒帶後綴對應 160 dpi:
所以,我們來看下序號 2 的實驗,按照上述理論的話,我們來計算看看這張圖片的內存大小:
轉換後的解析度:1080 * (240/160) * 452 * (240/160) = 1620 * 678
同一圖片,在同一台設備中,如果圖片放在 res 內的不同資源目錄下,那麼圖片佔用的內存空間是會不一樣的
同一圖片,放在 res 內相同的資源目錄下,但在不同 dpi 的設備中,圖片佔用的內存空間也是會不一樣的
圖片優化
所以,如果單從圖片本身考慮優化的話,也就只有兩個方向:
總結
最後,來稍微總結一下:
的
『貳』 如何照片設置成像素為300dpi或600dpi,大小為100K
准備材料:電腦、Photoshop修圖軟體
步驟:
1、首先下載並打開Photoshop修圖軟體,點擊「文件」選項。
『叄』 一張圖片所佔內存是如何計算的
Bitmap.Config 表示圖片像素類型,包括ALPHA_8、RGB_565、ARGB_4444、ARGB_8888
其中 A表示透明度;RGB分別是Red、Green、Blue,三種原色
1.在不考慮屏幕解析度和res文件夾解析度的情況下:
一張圖片(BitMap)佔用的內存=長 * 寬 * 每個像素點的大小
例如:一張圖片寬1080 ,高 452
那麼,這張圖片的大小按照這個公式應該是:1080 * 452 * 4B = 1952640B ≈ 1.86MB
2.考慮屏幕解析度和res文件夾解析度的情況下:
系統在載入 res 目錄下的資源圖片時,會根據圖片存放的不同目錄做一次解析度的轉換。
新長 = 原長 * (設備的 dpi / 目錄對應的 dpi )
新寬 = 原寬 * (設備的 dpi / 目錄對應的 dpi )
一張圖片(BitMap)佔用的內存= 新長 * 新寬 * 每個像素點的大小