Android Bitmap详细总结之Bitmap.Config色彩模式

1.Bitmap.Config枚举变量

这个枚举变量有四个值ALPHA_8,RGB_565,ARGB_4444,ARGB_8888:

对应ARGB色彩模式的四个标准。ARGB分别表示Alpha(透明度)通道,R(red红色)通道,G(Green绿色)通道,(Blue蓝色)通道。
`

1.ALPHA_8 只有透明度,没有色彩

2.RGB_565 色彩不丰富

3.ARGB_4444 早期Android使用,现已经废弃,因为在现在高分辨率手机下显示效果差

4.ARGB_8888 Android图片默认使用标准。色彩丰富,同时占用内存也大

1.1四个标准所占用内存大小

1.ALPHA_8 ALPHA通道占用8位即1个字节

2.RGB_565 R通道占用5位,G通道占用6位,B通道占用5位,共16位即2个字节

3.ARGB_4444 A,R,G,B四个通道各占用4位,共16位即2个字节

4.ARGB_8888 A,R,G,B四个通道各占用8位,共32位即4个字节

1.2使用这四个标准的图片理论占用内存大小

1.ALPHA_8 图片占用内存大小=像素长x像素宽x1(占用字节)

2.RGB_565 图片占用内存大小=像素长x像素宽x2(占用字节)

3.ARGB_4444 图片占用内存大小=像素长x像素宽x2(占用字节)

4.ARGB_8888 图片占用内存=像素长x像素宽x4(占用字节)

注意:这个是理论结论,在实际使用过程中,如果设置成了ALPHA_8,RGB_565,ARGB_4444标准。在绝大多数情况下,是不生效的。Android系统会强行转成使用ARGB_8888标准。具体细节我们下面讨论。

1.3四个标准的实际使用中的问题

1.3.1 能否使用 ALPHA_8标准将图片设置成黑白 ?

首先黑白的想法是错误的,因为ALPHA_8是没有颜色的,那么问题应该改成,使用ALPHA_8标准的图片是不是应该透明度会发生改变或者完全看不到图片?

我们通过下面的代码测试:

imageView1=(ImageView) findViewById(R.id.image1);
BitmapFactory.Options opts1 =new BitmapFactory.Options();
opts1.inPreferredConfig = Bitmap.Config.ALPHA_8;//设置色彩模式位ALPHA_8
imageView1.setImageBitmap(bitmap1);

发现显示的图片根本没有明显变化。换成了RGB_565,ARGB_4444也没有任何的明显变化。为什么ALPHA_8模式没有生效?这个问题我查了一个晚上...在下一小节分析后给出答案。

1.3.2 是否RGB_565比ARGB_8888占用内存少一半?

理论上是的。因为RGB_565占用2个字节,而ARGB_8888占用4个字节。但在实际使用过程中占用的内存是一样的!这不是因为理论是错误的,而是因为RGB_565模式并没有应用成功,Android系统强制将用户设置的RGB_565或其它模式强行换成了ARGB_8888模式。

原因:不同的色彩标准和Android系统版本会影响用户设置的色彩模式是否生效。

关于具体各个模式是否能够成功生效,这里给出如下结论(参考http://blog.csdn.net/ccpat/article/details/46834089):

  1. 所有情况下ARGB_8888配置都可以满足
  2. 所有情况下ALPHA_8配置都不满足
  3. 绝大多数(几乎全部)情况下RGB_565选项都不满足

通过下面的两张图可以看出在所有情况下ALPHA_8都不满足,绝大多数(几乎全部)情况下RGB_565都不满足。系统会强行使用ARGB_8888模式,这也就解释了1.3.1小节提到的为什么设置ALPHA_8设置没效果的问题。

Android Bitmap详细总结之Bitmap.Config色彩模式_第1张图片
image.png
Android Bitmap详细总结之Bitmap.Config色彩模式_第2张图片
image.png

1.4Bitmap.Config枚举变量小结

1.Bitmap.Config有四个参数ALPHA_8,RGB_565,ARGB_4444,ARGB_8888。

2.用户设置的ALPHA_8,RGB_565,ARGB_4444绝大多数(几乎全部)情况下无效,Android系统会强行将模式改为ARGB_8888。

2.Android图片压缩

你可能感兴趣的:(Android Bitmap详细总结之Bitmap.Config色彩模式)