将RGB颜色转换成16bit颜色
2012-06-11 17:26
666 查看
我在做16bit alpha blending的时候需要判断颜色键(ColorKey),而在我的游戏引擎中,ColorKey是用Windows RGB颜色表示的,这就需要将RGB颜色转换成16bit颜色,下面是我的做法。
RGB颜色是一个DWORD值,32bit,格式为0x00rrggbb,通过三个宏:GetRValue、GetGValue和GetBValue可以得到三个颜色分量,用8bitBYTE表示。16bit颜色有555和565两种,以565为例,565模式的16bit颜色格式为:rrrrrggggggbbbbb。我们的任务就是将0x00rrggbb转成rrrrrggggggbbbbb。
首先将RGB的三个分量分离出来,将它们分别转成用5bit,6bit,5bit表示的颜色(前3bit,2bit,3bit为0)。因为8bit是256级色度,转成5bit是32级色度,所以每8级色度一组转成1级色度,除以8(右移3位)就行;同样转成6bit只要除以4,因为6bit能表达64级色度。然后再将得到的5bit与上0x1f,6bit与上0x3f,将8bit前面的3bit或2bit清0。这时得到的三个分量为:R=000rrrrr
, G=00gggggg , B=000bbbbb 。最后将它们移位相或就可得到一个16bit565模式的颜色了。运算式如下:
Color16bit = GetRValue(ColorRGB)>>3<<11 | GetGValue(ColorRGB)>>2<<5 | GetBValue(m_ColorRGB)>>3 ;
转自:http://hi.baidu.com/kikyou%CE%DE%C4%EE/blog/item/b31591570cde0acfb745ae9f.html
RGB颜色是一个DWORD值,32bit,格式为0x00rrggbb,通过三个宏:GetRValue、GetGValue和GetBValue可以得到三个颜色分量,用8bitBYTE表示。16bit颜色有555和565两种,以565为例,565模式的16bit颜色格式为:rrrrrggggggbbbbb。我们的任务就是将0x00rrggbb转成rrrrrggggggbbbbb。
首先将RGB的三个分量分离出来,将它们分别转成用5bit,6bit,5bit表示的颜色(前3bit,2bit,3bit为0)。因为8bit是256级色度,转成5bit是32级色度,所以每8级色度一组转成1级色度,除以8(右移3位)就行;同样转成6bit只要除以4,因为6bit能表达64级色度。然后再将得到的5bit与上0x1f,6bit与上0x3f,将8bit前面的3bit或2bit清0。这时得到的三个分量为:R=000rrrrr
, G=00gggggg , B=000bbbbb 。最后将它们移位相或就可得到一个16bit565模式的颜色了。运算式如下:
Color16bit = GetRValue(ColorRGB)>>3<<11 | GetGValue(ColorRGB)>>2<<5 | GetBValue(m_ColorRGB)>>3 ;
转自:http://hi.baidu.com/kikyou%CE%DE%C4%EE/blog/item/b31591570cde0acfb745ae9f.html
相关文章推荐
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色[适合游戏编程初学者]
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- RGB颜色转换成16bit颜色
- RGB转换颜色
- RGB与YCbCr颜色空间的转换
- .NET 定义的颜色名称或 RGB 颜色转换。
- C# 调用颜色的RGB值_RGB颜色转换十六进制颜色
- 在google和火狐中用jquery获取颜色为rgb,怎么转换成为#CCDDFF这种颜色
- C#RGB颜色与16进制之间的转换
- 十六进制颜色码转换成RGB颜色值
- HSI颜色空间和RGB颜色空间之间的相互转换
- 颜色空间系列1: RGB和CIEXYZ颜色空间的转换及相关优化