Bitmap學習

位深和色深

  • 位深

表示存儲每個像素所用的位數,主要用於文件存儲

  • 色深

表示一個像素有多少種色彩描述,比如支持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進行縮放

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章