DirectX中的颜色表示

最近在学并行计算时,需要用到directX中的D3DCOLOR这一类型,才发现一直没仔细研究过DirectX中的D3DCOLOR这一类型。查看其定义后发现其定义如下:

typedef DWORD D3DCOLOR;

其中DWORD类型的定义如下

typedef unsigned long       DWORD;

是一个无符号型的长整数,(32位机器下)32位

在程序中对一个颜色赋值的时候习惯这样使用

 

D3DCOLOR color = D3DCOLOR_XRGB(0, 0, 255);//绿色


将D3DCOLOR_XRGB转到定义后发现这么一段代码

// maps unsigned 8 bits/channel to D3DCOLOR
#define D3DCOLOR_ARGB(a,r,g,b) \
    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)

从中D3DCOLOR_ARGB的定义可以看出它最后转化为D3DCOLOR类型值,并且注释了D3DCOLOR_ARGB中的四个变量分别对应颜色的四个通道:alpha, red, green, blue,其转化利用的是二进制的移位运算符<<和>>,在进行移位等操作后这四个参数分别占据了D3DCOLOR类型变量的四个字节,也就是D3DCOLOR的四个字节从高位到低位分别代表了颜色的alpha,red,green,blue通道。

比如现在有一个D3DCOLOR_ARGB(0,,255,192 ,128)在根据定义

// maps unsigned 8 bits/channel to D3DCOLOR
#define D3DCOLOR_ARGB(a,r,g,b) \
    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))

进行计算:

DirectX中的颜色表示_第1张图片

DirectX中的颜色表示_第2张图片

DirectX中的颜色表示_第3张图片

DirectX中的颜色表示_第4张图片

然后将上面的四个结果进行或运算


DirectX中的颜色表示_第5张图片

最后得到的就是一个32位的无符号长整型数,它的每8个字节表示一个颜色通道。



你可能感兴趣的:(DirectX中的颜色表示)