对于下面的类,假设RGBA都在0-255之间
class Color {
public:
short int r;
short int g;
short int b;
short int a;我见过像过时的GD库这样的库使用位移位和&,比如
((r & 0x7F000000) << 24) & ...但我担心这可能会很慢,我更喜欢一种更常见的方法。任何人都知道我如何将RGBA值打包到一个无符号整数中,而不使用过多的位运算符( GD方法使用大约6-8位移位/字节)。
发布于 2011-07-23 06:35:59
如果以适当的顺序将RGBA值存储在类中,只需将类实例解释为无符号int即可。没时间了。在C中,它一直都是这样做的。
有关更多细节,请参阅Mark的答案。
发布于 2011-07-23 06:37:50
最简单的方法是重新定义Color类,使其包含unsigned char而不是short,并确保它们的顺序对于处理器的字节顺序是正确的。然后使其成为具有32位整数类型的联合。
发布于 2011-07-23 06:41:00
恒定量的位移位并不慢。掩蔽通常并不慢。
在某些处理器上,变量移位很慢。但是,将RGBA颜色打包到整数中不涉及可变移位,因此它往往不会很慢。
https://stackoverflow.com/questions/6796783
复制相似问题