图片颜色
计算机在表示一个颜色时,都需要将该颜色对应到某一个颜色空间中的某个颜色值。常见的颜色空间有RGB,CMYK等。
计算机中图片文件中的颜色都已经被编码到某一个颜色空间了。JPEG支持RGB和CMYK颜色空间,一张JPG格式图片中的每个像素的颜色可能是用RGB颜色空间来编码的,也可能是用CMYK的颜色空间。而PNG只支持RGB颜色空间,一张PNG的图片中的每个像素的颜色一定是用RGB颜色空间来编码的。
此外,绝大多数显示器都只接受RGB颜色的输入,计算机在显示一张图片时,如果图片本身是非RGB颜色空间编码的,需要将其转化为RGB颜色空间的颜色后再显示,所以一张CMYK编码的图片在显示器上看到的会和图片本身的颜色有失真,当然这只是显示,图片本身还是原来的编码方式。
对RGB颜色空间,一个颜色分为R,G,B三个颜色通道。
图片透明度
对图片来说,每个像素除了有颜色信息外,还可以包含透明度信息。在计算机中透明度用一个单独的通道来表示,通常称为Alpha通道。
并非所有的图片格式都支持透明度,JPEG格式图片不支持透明度,PNG,GIF格式支持透明度。
Android颜色和透明度表示
在Android中通常用一个32位的整数来表示一个像素的颜色和透明度。32位的4个字节从高到低分别表示Alpha,R,G,B四个通道,每个通道用8位表示,每个通道的值范围是[0, 0xFF),对Alpha通道0表示完全透明,0xFF表示完全不透明。对R,G,B三个通道,0表示没有该通道的颜色分量,0xFF表示该通道颜色分量达到最大。R,G,B三个通道均为0为黑色,R,G,B三个通道均为0xFF表示白色。
例如0x00FF0000表示该像素完全透明,颜色为红色。0xFF00FF00表示该像素完全不透明,颜色为绿色。0x7DFFFFFF表示该像素为半透明,颜色为白色。
inpreferredconfig参数
BitmapFactory.Options类是BitmapFactory对图片进行解码时使用的一个配置参数类,其中定义了一系列的public成员变量,每个成员变量代表一个配置参数。参数inpreferredconfig表示图片解码时使用的颜色模式,也就是图片中每个像素颜色的表示方式。
inpreferredconfig参数的可选值
参数inpreferredconfig的可选值有四个,分别为ALPHA_8,RGB_565,ARGB_4444,ARGB_8888。它们的含义列举如下。
参数取值 | 含义 |
---|---|
ALPHA_8 | 图片中每个像素用一个字节(8位)存储,该字节存储的是图片8位的透明度值 |
RGB_565 | 图片中每个像素用两个字节(16位)存储,两个字节中高5位表示红色通道,中间6位表示绿色通道,低5位表示蓝色通道 |
ARGB_4444 | 图片中每个像素用两个字节(16位)存储,Alpha,R,G,B四个通道每个通道用4位表示 |
ARGB_8888 | 图片中每个像素用四个字节(32位)存储,Alpha,R,G,B四个通道每个通道用8位表示 |
ALPHA_8模式
ALPHA_8模式表示的图片信息中只包含Alpha透明度信息,不包含任何颜色信息,所以ALPHA_8模式只能用在一些特殊场景。
RGB_565模式
显然RGB_565模式不能表示所有的RGB颜色,它能表示的颜色数只有32 × 64 × 32 = 65536种,远远小于24位真彩色所能表示的颜色数(256 × 257 × 256 = 16677216&