位深和色深
- 位深
表示存储每个像素所用的位数,主要用于文件存储
- 色深
表示一个像素有多少种色彩描述,比如支持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进行缩放