我在做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颜色转换成16bit颜色相关推荐

  1. RGB颜色转换成16bit颜色

    RGB颜色是一个DWORD值,32bit,格式为0x00rrggbb,通过三个宏:GetRValue.GetGValue和GetBValue可以得到三个颜色分量,用8bitBYTE表示.16bit颜色 ...

  2. android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...

    把bitmap图片的某一部分的颜色改成其他颜色 private Bitmap ChangeBitmap(Bitmap bitmap){ int bitmap_h; int bitmap_w; int ...

  3. android bitmap 替换指定颜色,Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法...

    Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法 发布时间:2020-07-29 14:11:15 来源:亿速云 阅读:107 作者:小猪 这篇文章主要讲解了Android实现把 ...

  4. C语言运行时变成灰色,C语言实现RGB图像转换成灰(Gray)度图像

    以前实现RGB图像转换成灰度图像都是直接调用OpenCV的库函数RGB2GRAY(IplImage* src);最近老板让我们除了读入输出图像实时用OpenCV的函数,其余的最好都是自己写,所以我自己 ...

  5. 一幅RGB彩色原图和其三个分量的显示,RGB图转换成HSI的显示

    数字图形处理实验记录 实验一 :一幅RGB彩色原图和其三个分量的显示,RGB图转换成HSI的显示 转换原理:采用圆锥模型公式 测试步骤: Matlab转化函数: function HSI = RGB2 ...

  6. [JS] HEX颜色转换成RGBA

    写了一个函数,可以把hex格式的颜色转为rgba的格式 实际上不是颜色转换,主要是slice()函数的使用吧,当成字符串理解就好. function change(hex) {if (hex.leng ...

  7. RGB图像转换成HSV图像,HSV图像转换为RGB图像

    HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...

  8. jquery颜色转换html,jQuery颜色选取器插件COLPICK

    插件描述:简单 RGB.HSB.十六进制颜色选取器 jQuery 插件 没有图像 !只是 JS 和 CSS 文件 非常直观类似 Photoshop 的界面 光明和黑暗很容易自定义 CSS3 外观 28 ...

  9. RGB图像转换成YCbCr图像,rgb2ycbcr的使用,转换参数

    原理 YCbCr到RGB的转换 Y' = 0.257*R' + 0.504*G' + 0.098*B' + 16Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128C ...

  10. RGB深度图转换成点云-三维重建001

    最近做实验,想实现深度估计到三维点云再到网格的生成,第一步做出深度图结合RGB图生成三维点云,感觉效果凑合, 供大家欣赏! RGB室内图: Depth Image:(隐隐约约能过看到点什么) 生成的结 ...

最新文章

  1. Nginx配置反向代理,一篇搞定!
  2. Windows 系统安装Docker Compose 步骤
  3. Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化
  4. Android项目实战(十三):浅谈EventBus
  5. 反思代码能力提升点:写链接不要写带域名的 一换环境就要改
  6. 《javascript高级程序设计》第六章总结
  7. SFB 项目经验-05-共存迁移-Lync 2013-SFB 2015-边缘服务器复制状态不正常
  8. matlab 高分屏 变小,解决Ubuntu高分屏下matlab标题栏(菜单栏)字体过小问题
  9. python中的序列化与反序列化
  10. C# 使用WinApi操作剪切板Clipboard
  11. python yield 简单用法_通过实例简单了解python yield使用方法
  12. 深入MTK平台bootloader启动分析笔记
  13. 饿了么回应7道菜仅1道正品事件:先行赔付 停止骑手配送资格
  14. 猿辅导 python_关于猿辅导机器学习项目ytk-learn和ytk-mp4j分布式机器学习库
  15. 天津商业大学C语言题库,天津商业大学c语言机考改错及解答(含答案)解析.doc
  16. 当IDENTITY_INSERT设置为OFF时不能向表插入显示值。(源:MSSQLServer,错误码:544)
  17. 区块链主流共识算法全面解析
  18. [样本分析] Ramnit感染型病毒
  19. mysql对表中添加属性_MySQL数据库增删改字段(属性)
  20. Oracle连接pg,pg连接oracle.sql

热门文章

  1. 解锁三星bl锁有几种方法_三星Note5解锁教程_三星Note5 CROM解BL锁的方法
  2. r语言 c d生产函数,R语言定义多维数组和数组的运算
  3. STM32F103RCT+TJA1050+USBCAN盒做can通讯
  4. php+html文本域,html的文本域和表单域
  5. 48盘位 云存储服务器_搭建云存储NAS服务器的3个技巧
  6. 六万字带你一次性速通python爬虫基础
  7. 饥荒服务器文档,建立饥荒服务器
  8. Mac IntelliJIDEA非正常关闭解决(reopen失败)
  9. WPS个人版如何启用VBA(宏)
  10. c语言智能手环程序,c+智能手环怎么用 c+智能手环使用图文教程