关闭

将RGB颜色转换成16bit颜色[适合游戏编程初学者]

标签: 游戏编程windows引擎任务
3735人阅读 评论(4) 收藏 举报

将RGB颜色转换成16bit颜色

[适合与游戏编程初学者]

   我在做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 ; 

   挺简单吧,只不过是一堆位运算。只要多动动脑筋,我们可以很容易的写出各种格式之间的转换式。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

十六进制颜色码转换成RGB颜色值

十六进制颜色码转换成RGB颜色值相关知识点 0xFF 十六进制 如果转成二进制位:11111111 int值是32位,0二进制: 00000000000000000000000000000000 &按...
  • zhou8622
  • zhou8622
  • 2015-05-20 17:04
  • 1789

图片处理(一)之BMP格式24bit转16bit

功能: 通过C程序实现图片处理,把24bit_BMP转为16bit_BMP 主要流程: 1)打开图片文件,获得文件流指针 2)读取开头54byte,获取图片头部结构体,分析图片信息 3)再获取图片的数...
  • z_y_yang
  • z_y_yang
  • 2016-06-21 21:31
  • 1775

RGB与Ycbcr空间的互相转换

一、RGB与Ycbcr转换的公式 1.RGB表示三原色:红绿蓝 Y:表示明亮度,也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。 Cb:反映的...
  • chenyu19880302
  • chenyu19880302
  • 2013-09-16 10:43
  • 7100

MATLAB图像处理_YUV与RGB颜色空间互转

RGB颜色空间         关于RGB颜色空间,相信做图像处理的人基本都比较熟悉,还是说一下R、G、B三个分量,每个分量各占8位即一个字节,三个分量总共是3个字节,即24bit,三个分量可以组合出...
  • scottly1
  • scottly1
  • 2014-12-27 14:35
  • 6666

IOS小技巧——如何将美工的16进制颜色转换成IOS中的RGB颜色

// 在我们实际工作中,美工给我们的UI图在是表明256位设置的UIColor,而是给我们16进制的颜色代码,例如@”#ffffff”等那么,我们该如何将这些颜色代码转换成我们需要的颜色呢?
  • github_29614995
  • github_29614995
  • 2015-07-08 00:50
  • 592

将RGB图像转换成LAB颜色空间图像

  • 2014-08-24 20:53
  • 2KB
  • 下载

RGB颜色空间转换成YUV颜色空间

  • 2008-08-28 18:56
  • 1.67MB
  • 下载

javascript把RGB指定颜色转换成十六进制颜色(Converting R,G,B values to HTML hex notation)

javascript把RGB指定颜色转换成十六进制颜色
  • Monkind
  • Monkind
  • 2014-05-01 19:08
  • 1456

java后台如何将rgb与16进制颜色进行转换

在开发过程中接触到了颜色转换,前端采用了color标签。格式是rgb(xx,xx,xx)格式的,而服务器端数据库存储的是#XXXX12格式16进制代码,那么这之间就需要进行转换,一开始在网上找了一些教...
  • Jason763
  • Jason763
  • 2017-06-02 14:32
  • 1249

[python]从零开始学python——颜色的16进制于RGB之间的转换

Talk is cheap, show me the code!
  • u011714530
  • u011714530
  • 2015-10-27 21:23
  • 5034
    个人资料
    • 访问:696072次
    • 积分:9212
    • 等级:
    • 排名:第2326名
    • 原创:211篇
    • 转载:12篇
    • 译文:0篇
    • 评论:339条
    博主链接
    最新评论
    同道中人