不同色彩模式下定义的宏
最近在学习Directx(刚接触),主要是接触关于游戏编程这方面,只涉及到一部分Directx,学到色彩模式的时候,有16位高彩模式和24以及32位的真彩模式。这其中16位高彩模式有555和565两种,
24位的是888格式,32位的是分为4个字节,属于8888格式,这里不做详细介绍,读者可以参考有关书籍。
彩编码格式了,那么接下来就是建立它们了。你可以通过简单的移位和掩码操作来完成这个人物。算法表示为如下的宏:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#define _RGB16BIT555(r,g,b) (( ( r & 31 ) << 10 ) + ( ( g & 63 ) << 5) + (b & 31 ) )
#define _RGB16BIT565(r,g,b) ( ( ( r & 31 ) << 11) + ( ( g & 63 ) << 5) + ( b & 31 ) )
#define _RGB24BIT(r,g,b) ((b) + ((g) << 8 ) +( (r) << 16 ) )
#define _RGB32BIT(a,r,g,b) ( ( ( a ) << 24 ) + ( ( r ) << 16 ) + ( (g) << 8 ) + ( b ) )
有这么些宏定义了,ok,就解决了创建的问题了,但是在这里创建宏的时候,我就犯了一个很大的错误,导致最后我找了好久才发现这里出了问题,什么问题呢?括号的问题!在这里如果你是写成这样
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#define _RGB16BIT555(r,g,b) (( r & 31 ) << 10 + ( g & 63 ) << 5 (b & 31 ) )
#define _RGB16BIT565(r,g,b) ( ( r & 31 ) << 11 + ( g & 63 ) << 5+ ( b & 31 ) )
#define _RGB24BIT(r,g,b) ( (b) + (g) <<8 + (b) << 16 )
#define _RGB32BIT(a,r,g,b) ( ( a ) << 24 + ( r ) << 16 + (g) << 8 + ( b )
你看到有什么不同了吗?对,里面少了一些括号,就是这些括号导致我这样的新手在载入一张背景图的时候总是不能显示出来。因为+的优先级大于<<的优先级,所以会导致不能显示出图片的后果,在这里
希望大家能够引以为戒,不要犯同样的错误。而且这种错误很低级,哎,惭愧啊!
有技术才有魅力,在飘雪的季节守候花开!