RGB颜色值存储为无符号整数(包括还原RGB)【附完整源码】

RGB颜色值存储为无符号整数

在图片编程中,经常会出现需要存储RGB颜色值的情况。传统的方法是把R,G,B三个值分别存起来。这种方式效率比较低,也比较占内存。
更好一点的方式是把RGB颜色值存储为24位的无符号整数。
例如:现在有(R:3,G:255,B255)。
用24位的二进制表示分别为:
R:0000 0000 0000 0000 0000 0011
G:0000 0000 0000 0000 1111 1111
B:0000 0000 0000 0000 1111 1111

RGB三个值最高是255,即2的8次方减一。也就是说R,G,B三个值在二进制中都不会超多8位数,0-255,即为0000 0000 ——1111 1111。所以三个颜色值拼起来刚好是24位。
所以,我们将这三个值按位运算(如果不熟悉C++的按位与,请翻书补充基础知识)。
将R值向左移动16位,即R<<16;将G值向右移动8位,即G<<8;B值不用移动。然后将结果求按位与,即(R<<16)|(G<<8)|B。
这样就将RGB三个值存为一个无符号整型,总大小3bit。原来需要用三个值存储的颜色,现在只需要一个24位的无符号整型就能存储,节省了空间和提高了效率。
上述RGB的结果就变成了:0000 0011 1111 1111 1111 1111,即26214。
RGB转换成无符号整数的代码如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值