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进行缩放

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