没有完全理解这部分代码

Not fully understanding this part of code

我最近遇到了这段代码,但我无法理解它。有人可以向我解释那里发生了什么吗?

union Color32
{
   struct ARGB
   {
      uint8_t b;
      uint8_t g;
      uint8_t r;
      uint8_t a;
   } parts;
   uint32_t argb;
   Color32() : argb(0) {}
   Color32(uint32_t c_argb) : argb(c_argb) {}
   Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
   {
       parts.a=a;
       parts.r=r;
       parts.g=g;
       parts.b=b;
   }
};

ARGB 是一个由 4 个单位组成的结构,分别代表绿色、蓝色、红色和我不知道的颜色。 该结构是使用名称 parts 创建的,因此当您必须使用它时,您必须像:parts.r = 20 或 parts.g = 50.

然后它创建一个对象颜色,它可以包含 argb 的 4 个参数 (4*8 = 32)。

它用你给他的 4 个参数初始化了对象颜色 32:a,b,c,d

Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
   {
   parts.a=a;
   parts.r=r;
   parts.g=g;
   parts.b=b;
   }

要继续,您有一个名为 Color 的 32 位对象,其中包含来自结构部分的 4 个 8 位对象。

union 的成员共享存储空间。这与 struct 形成对比,其中每个成员都分配了不同的存储空间。

这段代码的效果是 ARGB 结构的成员 b,g,r & a 与其他成员共享存储空间Color32 union.

的成员 argb

所以设置argb值的构造函数隐式设置b,g,r & a的值作为有序部分argb.

的位模式

相反,bgr & a 构造函数构建了 argb.

的值

这里 'ARGB' 下的图表非常好地展示了这些部分如何 'packed' 变成 32 位块。

http://en.wikipedia.org/wiki/RGBA_color_space

我可能不需要解释 b 代表蓝色,g绿色,r 代表红色,a 代表 alpha(又名透明度)!

如果有大端/小端可移植性的要求,您可能会遇到困难。