将RGB颜色转换成16bit颜色
来源:互联网 发布:淘宝最靠谱的aj店 编辑:程序博客网 时间:2024/06/05 08:31
我在做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 ) & 0x1f)<<11 |
( ( GetGValue(ColorRGB)>>2) & 0x3f)<<5 |
( GetBValue(ColorRGB)>>3 ) & 0x1f;
其实并没有必要与上0x1f和0x3f,因为转化后的色度范围是0~31或0~63,前3bit或2bit必为0(从位运算角度看右移后前面空出来的位自动填0);所以去掉上面的与操作,就是(注意移位操作不能合并,否则不能使前3bit,2bit清0):
Color16bit = GetRValue(ColorRGB)>>3<<11 | GetGValue(ColorRGB)>>2<<5 | GetBValue(m_ColorRGB)>>3 ;
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 ) & 0x1f)<<11 |
( ( GetGValue(ColorRGB)>>2) & 0x3f)<<5 |
( GetBValue(ColorRGB)>>3 ) & 0x1f;
其实并没有必要与上0x1f和0x3f,因为转化后的色度范围是0~31或0~63,前3bit或2bit必为0(从位运算角度看右移后前面空出来的位自动填0);所以去掉上面的与操作,就是(注意移位操作不能合并,否则不能使前3bit,2bit清0):
Color16bit = GetRValue(ColorRGB)>>3<<11 | GetGValue(ColorRGB)>>2<<5 | GetBValue(m_ColorRGB)>>3 ;
阅读全文
0 0
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色
- 将RGB颜色转换成16bit颜色[适合游戏编程初学者]
- 将RGB转换成颜色
- 将16进制颜色转换成RGB值
- IOS 将16进制颜色转换成RGB
- js将16进制颜色转换成RGB格式
- object-c将RGB颜色转换成16进制HTML颜色
- 如何将24位RGB颜色转换16位RGB颜色
- 将RGB颜色值转换为UIColor
- RGB颜色转换16进制
- 16bit颜色转换方法
- IOS小技巧——如何将美工的16进制颜色转换成IOS中的RGB颜色
- RGB颜色转换十六进制颜色
- oc 颜色转换 16进制 转换成RGB
- (null) entry in command string: null chmod 0700的解决方法
- POJ-2955-Brackets
- [学习笔记]Android RecyclerView
- 弱网测试
- centos 部署 tomcat 指定 jre版本
- 将RGB颜色转换成16bit颜色
- Spring 注入 Map
- 【设计模式】—— 装饰模式Decorator
- 设计模式之建造者模式
- 在java中assert有什么作用?
- CodeForces
- 如何隐藏硬盘坏道
- Jenkins的安装和启动
- IAR软件的安装