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转换成无符号整数的代码如下: