DirectX中的颜色表示

本文详细解析了DirectX中D3DCOLOR类型的定义及其在颜色编码中的应用,通过D3DCOLOR_ARGB、D3DCOLOR_RGBA和D3DCOLOR_XRGB的转换过程,深入探讨了颜色通道在32位无符号长整数中的分布与意义,为开发者提供了一种高效的颜色管理方法。

最近在学并行计算时,需要用到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个字节表示一个颜色通道。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值