C ++ Pack RGBA到unsigned int

时间:2011-07-22 22:33:21

标签: c++ bitwise-operators

使用以下类,假设RGBA都在0-255之间

class Color {
    public:
        short int r;
        short int g;
        short int b;
        short int a;

我见过像老化的GD库这样的库,使用了bithifting和&,比如

 ((r & 0x7F000000) << 24) & ...

但是我担心这可能会很慢,我更喜欢更常见的方法。任何人都知道如何在不使用过多的按位运算符的情况下将RGBA值打包成unsigned int(GD方法每个字节使用大约6-8位移位)。

4 个答案:

答案 0 :(得分:2)

如果以适当的顺序将rgba值存储在类中,只需将类实例解释为unsigned int。没时间。它一直在C中完成。

有关详细信息,请参阅Mark的答案。

答案 1 :(得分:2)

最简单的方法是重新定义Color课程以保留unsigned char而不是short,并确保它们处理器的字节顺序正确。然后使它成为一个32位整数类型的联合。

答案 2 :(得分:2)

恒定量的位移并不慢。掩蔽通常不会很慢。

在某些处理器上,变量转换很慢。但是将RGBA颜色打包成一个整数并不涉及变量,所以它往往不会很慢。

答案 3 :(得分:0)

按位运算符实际上并不“慢”。实际上,它们通常是CPU可以执行的一些最快的操作。 Heck ARM可以在大多数时间免费为您提供班次。当它涉及到它时,如果你想安全地将变量包装到一个较小的空间(确保没有位溢出),你需要使用按位函数。甚至位域内部都默认为它们。