将RGBA打包为无符号整型

C++ Pack RGBA to unsigned int

本文关键字:无符号 整型 RGBA      更新时间:2023-10-16

使用下面的类,假设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大部分时间都免费给你换班。归根结底,如果您希望安全地将变量打包到更小的空间中(确保没有位溢出),则需要使用按位函数。甚至连位域内部也默认使用。