位深和色深
- 位深
表示存儲每個像素所用的位數,主要用於文件存儲
- 色深
表示一個像素有多少種色彩描述,比如支持RGB,每個佔8位所以位圖色深24位
100像素x100像素的圖片, 使用ARGB_8888,所以色深32位,保存時選擇位深爲24位,則在內存中所佔大小爲:100 x100 x (32 / 8)Byte,而在文件所佔大小爲** 100 x100 x( 24/ 8 ) x 壓縮效率 Byte**。
-
ALPHA_8:代表8位Alpha位圖(沒有存儲任何的色彩信息,每一個像素只需要1byte存儲)
-
ARGB_4444:代表16位ARGB位圖,質量太差,Android不建議使用,建議使用ARGB_8888
-
ARGB_8888:代表32位ARGB位圖,並且可以提供最好質量的圖片顯示,A,R,G.B各佔8bit,。
-
RGB_565:代表16位RGB位圖,不存儲Alpha值,只用2bytes存儲RGB信息,其中R爲5bit,G爲6bit,而B爲5bit。
-
HARDWARE:該模式表示硬件位圖,該模式的作用可以查看Glide對他的解釋,這裏不過多討論。
-
RGBA_F16:該模式不太特別清楚,有待研究。
inBitmap
接下來再看下inBitmap參數,在Android3.0版本後,該參數就在源碼中加上了,該參數的意義在於複用當前Bitmap所申請的內存空間,以優化釋放舊Bitmap內存以及重新申請Bitmap內存導致的性能損耗。這裏討論的版本爲Android4.4.4以後,在該版本以後,使用該參數需要滿足如下條件: Bitmap本身可可變的(mutable)
新的Bitmap的內存需要小於等於舊的Bitmap的內存 新申請的bitmap與舊的bitmap必須有相同的解碼格式,如:使用了ARGB_8888就不能再使用RGB_565的解碼模式了。
滿足了上面兩個條件,就可以重新複用內存,而不需要額外申請了,具體的使用教程移步Andorid官方教程: Managing Bitmap Memory,這裏就不深入了。
縮放和壓縮
- 縮放
BitmapFactory.decode()計算出scale,然後通過cavas的scale進行縮放