您的位置:首页 > 其它

DirectX中的颜色表示

2015-09-15 16:24 148 查看
最近在学并行计算时,需要用到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)))

进行计算:









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



最后得到的就是一个32位的无符号长整型数,它的每8个字节表示一个颜色通道。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  directx