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模式. 節省一半的內存空間.
===================================================================
Enum Values | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bitmap.Config | ALPHA_8 |
Each pixel is stored as a single translucency (alpha) channel. This is very useful to efficiently store masks for instance. No color information is stored. With this configuration, each pixel requires 1 byte of memory. 此時圖片只有alpha值,沒有RGB值,一個像素佔用一個字節 |
|||||||||
Bitmap.Config | ARGB_4444 |
This field is deprecated. Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead. 這種格式的圖片,看起來質量太差,已經不推薦使用。 Each pixel is stored on 2 bytes. The three RGB color channels and the alpha channel (translucency) are stored with a 4 bits precision (16 possible values.) This configuration is mostly useful if the application needs to store translucency information but also needs to save memory. It is recommended to use ARGB_8888 instead of this configuration. 一個像素佔用2個字節,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各佔4個bites,共16bites,即2個字節 |
|||||||||
Bitmap.Config | ARGB_8888 |
Each pixel is stored on 4 bytes. Each channel (RGB and alpha for translucency) is stored with 8 bits of precision (256 possible values.) This configuration is very flexible and offers the best quality. It should be used whenever possible 一個像素佔用4個字節,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各佔8個bites,共32bites,即4個字節 這是一種高質量的圖片格式,電腦上普通採用的格式。它也是Android手機上一個BitMap的默認格式。 |
|||||||||
Bitmap.Config | RGB_565 |
Each pixel is stored on 2 bytes and only the RGB channels are encoded: red is stored with 5 bits of precision (32 possible values), green is stored with 6 bits of precision (64 possible values) and blue is stored with 5 bits of precision. This configuration
can produce slight visual artifacts depending on the configuration of the source. For instance, without dithering, the result might show a greenish tint. To get better results dithering should be applied. This configuration may be useful when using opaque
bitmaps that do not require high color fidelity. 一個像素佔用2個字節,沒有alpha(A)值,即不支持透明和半透明,Red(R)值佔5個bites ,Green(G)值佔6個bites ,Blue(B)值佔5個bites,共16bites,即2個字節.對於沒有透明和半透明顏色的圖片來說,該格式的圖片能夠達到比較的呈現效果,相對於ARGB_8888來說也能減少一半的內存開銷。因此它是一個不錯的選擇。另外我們通過android.content.res.Resources來取得一個張圖片時,它也是以該格式來構建BitMap的. 從Android4.0開始,該選項無效。即使設置爲該值,系統任然會採用 ARGB_8888來構造圖片 |
透明度 紅色 綠色 藍色
圖片格式(Bitmap.Config) |
佔用內存的計算方向 |
一張100*100的圖片佔用內存的大小 |
ALPHA_8 |
圖片長度*圖片寬度 |
100*100=10000字節 |
ARGB_4444 |
圖片長度*圖片寬度*2 |
100*100*2=20000字節 |
ARGB_8888 |
圖片長度*圖片寬度*4 |
100*100*4=40000字節 |
RGB_565 |
圖片長度*圖片寬度*2 |
100*100*2=20000字節 |