Android inpreferredconfig参数分析

本文详细分析了Android中BitmapFactory.Options的inpreferredconfig参数,探讨了其对图片解码颜色模式的影响,包括ALPHA_8、RGB_565、ARGB_4444和ARGB_8888四种模式的优缺点。尽管RGB_565模式理论上可以减少内存占用,但在实际应用中,由于Android系统可能会自动选择ARGB_8888,导致内存优化效果不明显。文章通过实验验证了这一现象,并提供了测试结果。
摘要由CSDN通过智能技术生成

图片颜色

计算机在表示一个颜色时,都需要将该颜色对应到某一个颜色空间中的某个颜色值。常见的颜色空间有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&

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值