ALPHA_8、ARGB_4444、ARGB_8888和RGB_565的区别

本文详细介绍了Android中Bitmap.Config的四种枚举类型:ALPHA_8、ARGB_4444、ARGB_8888和RGB_565。每种类型的存储方式、所占内存及适用场景都有具体说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android的Bitmap.Config中有四个枚举类型:ALPHA_8ARGB_4444ARGB_8888RGB_565

下面是这四种类型的详细解释:

ALPHA_8:每个像素都需要1(8位)个字节的内存,只存储位图的透明度,没有颜色信息

ARGB_4444:A(Alpha)占4位的精度,R(Red)占4位的精度,G(Green)占4位的精度,B(Blue)占4位的精度,加起来一共是16位的精度,折合是2个字节,也就是一个像素占两个字节的内存,同时存储位图的透明度和颜色信息。不过由于该精度的位图质量较差,官方不推荐使用

ARGB_8888:这个类型的跟ARGB_4444的原理是一样的,只是A,R,G,B各占8个位的精度,所以一个像素占4个字节的内存。由于该类型的位图质量较好,官方特别推荐使用。但是,如果一个480*800的位图设置了此类型,那个它占用的内存空间是:480*800*4/(1024*1024)=1.5M

RGB_565:同理,R占5位精度,G占6位精度,B占5位精度,一共是16位精度,折合两个字节。这里注意的时,这个类型存储的只是颜色信息,没有透明度信息

### RGB to ARGB函数解析 #### 使用说明 `rgb_to_argb` 函数主要用于将标准的红绿蓝三通道颜色值(RGB)转换为带透明度的四通道颜色值(ARGB)。这种转换通常应用于图形处理软件、嵌入式显示系统以及各种需要精确色彩管理的应用场景中。 #### 实现方法 为了完成从RGBARGB的转变,主要操作是在原有的红色(R)、绿色(G)、蓝色(B)三个分量基础上增加一个代表不透明度(Alpha)的新分量A。对于大多数情况,默认情况下可以设 Alpha 值为全不透明即255(最大值),除非特别指定了其他数值[^1]。 ```cpp uint32_t rgb_to_argb(uint8_t r, uint8_t g, uint8_t b){ // 默认完全不透明 const uint8_t a = 255; // 将各部分组合成单一的32位整数返回 return ((a << 24) | (r << 16) | (g << 8) | b); } ``` 此 C++代码片段展示了如何定义并实现 `rgb_to_argb` 函数。这里采用了左移运算符 (`<<`) 来调整各个字节的位置以便于构建最终的结果值。由于ARGB格式规定了最高有效字节存储的是alpha通道的数据,因此先对 alpha 进行了最左边位置的操作。 #### 示例代码 下面给出一段完整的例子,它不仅包含了前面提到的核心逻辑,还增加了输入验证机制以确保传入的颜色成分都在合法范围内: ```cpp #include <iostream> using namespace std; // 定义 rgb_to_argb 函数 uint32_t rgb_to_argb(uint8_t r, uint8_t g, uint8_t b); int main(){ try{ cout << "请输入 R G B 的值:" ; unsigned char red, green, blue; cin >> hex >> red >> green >> blue; // 输入十六进制形式 if(red > 0xFF || green > 0xFF || blue > 0xFF) throw invalid_argument("非法的颜色组件"); uint32_t argbValue = rgb_to_argb(red,green,blue); printf("对应的 ARGB 整形表示:%u\n",argbValue); } catch(const exception& e){ cerr << e.what(); } return 0; } uint32_t rgb_to_argb(uint8_t r, uint8_t g, uint8_t b){ static constexpr uint8_t FULL_OPACITY{255}; return (((FULL_OPACITY & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8 ) | ((b & 0xFF))); } ``` 这段程序允许用户通过命令行界面提供一组RGB值作为输入,并输出相应的ARGB整型表示结果。同时加入了异常捕获结构用来处理可能发生的错误状况,如超出范围的颜色分量等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值