将RGBA打包为无符号整型
C++ Pack RGBA to unsigned int
使用下面的类,假设RGBA都在0-255之间
class Color {
public:
short int r;
short int g;
short int b;
short int a;
我见过使用位移和&的库,如老化的GD库,如
((r & 0x7F000000) << 24) & ...
,但我担心这可能很慢,我更喜欢一个更常见的方法。有人知道我如何将RGBA值打包成unsigned int而不使用过多的位运算符(GD方法每字节使用大约6-8位移位)。
最简单的方法是重新定义Color
类以保存unsigned char
而不是short
,并确保它们在处理器的端序中处于正确的顺序。然后将其设置为32位整数类型的并集。
一定数量的位移并不慢。屏蔽通常不慢。
在一些处理器上,变量移位是缓慢的。但是将RGBA颜色打包成整数不涉及变量移位,所以它往往不慢。
如果按适当的顺序在类中存储rgba值,只需将类实例解释为unsigned int。没有时间。这在c语言中一直都是这么做的。
按位运算符并不是真的"慢"。实际上,它们通常是CPU可以执行的最快的操作。见鬼,ARM大部分时间都免费给你换班。归根结底,如果您希望安全地将变量打包到更小的空间中(确保没有位溢出),则需要使用按位函数。甚至连位域内部也默认使用。
相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- CPP 如何在无符号整数值中使用布尔值?
- C++模板特征以指定任何无符号整型
- 无符号长整型VS无符号长型整型
- 如何根据位将有符号整数值转换为无符号整数值
- 是对定义良好的有符号整型进行位操作的结果
- 如何使用SSE将_m128i转换为无符号整型?
- 不能使用parameter作为无符号整型,通过引用传递
- 稍后在{}中添加无符号整型数组
- 无符号整型转换
- 如何工作与内存地址在C?它们是十六进数还是无符号整型
- c++无符号整型的位补码返回负值
- 由于头文件中无符号整型初始化,调试模式链接失败
- 如果枚举不能装入无符号整型,会发生什么情况?
- 在c++中将无符号整型重新解释为浮点型
- 将RGBA打包为无符号整型
- 64位向量的点积速度比32位无符号整型向量快两倍
- 如何将表示像素的字符数组读取为无符号整型
- 将16位无符号整型数组转换为32位浮点数组
- OpenMP - OpenMP 语句中的索引变量'for'必须具有有符号整型