常用colorref颜色对照表,方便查找直接拿来用。

吉云

今天捣鼓下 COLORREF 这玩意儿,顺手记录一下过程。

起因是搞一个小工具,想改个界面元素的颜色,结果发现它要的不是咱们平时说的“红色”、“绿色”,也不是那种“#FF0000”的代码,而是这个叫 COLORREF 的东西。具体来说,就是一个函数参数,类型标明是 COLORREF

一开始有点懵,这串数字是啥玩意儿?看着像是一串十六进制的数字,比如 0x00FF0000 这种。查下资料,,原来是Windows里头表示颜色的老方法,就是把红(R)、绿(G)、蓝(B)三个颜色的值塞到一个32位的整数里头。

常用colorref颜色对照表,方便查找直接拿来用。

关键是它的顺序有点怪,不是咱们直觉上的RGB,好像是蓝绿红(BGR)的顺序,具体来说,最低那个字节存的是蓝色(Blue)的值,中间字节存的是绿色(Green),再高一点的字节存的是红色(Red)。最高那个字节好像没用,一般是0。比如纯红色,RGB是(255, 0, 0),那对应的 COLORREF 数值(十六进制)反而是 0x000000FF 这样子。如果是纯绿色 (0, 255, 0),那就是 0x0000FF00。纯蓝色 (0, 0, 255) 就是 0x00FF0000

搞明白这个就好办。我一般是这样做的:

  • 先用取色工具或者网页啥的,找到我想要的颜色的RGB值。比如说,我想要一个特定的灰色,RGB值可能是 (128, 128, 128)。
  • 然后用Windows提供的一个宏,叫 RGB(r, g, b),这个特别方便。直接把红、绿、蓝三个值(0到255之间)填进去,它就能自动帮你算好那个 COLORREF 数值。像刚才那个灰色,就是 RGB(128, 128, 128),它内部会帮你组合成 0x00808080
  • 把这个用 RGB 宏算出来的值,填到那个需要 COLORREF 类型参数的地方就行。我的那个小工具界面颜色就这么改成功。
  • 常用colorref颜色对照表,方便查找直接拿来用。

实践中的一些发现:

有时候看别人的代码或者一些老的库、老的例子,会直接写死一些 COLORREF 值,像 0x000000 (黑色), 0xFFFFFF (白色), 0x0000FF (红色), 0x00FF00 (绿色), 0xFF0000 (蓝色)。看得多大概也能猜出来是啥颜色,或者反推它的RGB值。

我还看到过定义一个颜色数组的,像这样:

COLORREF MyColors[] = { 0x000000FF, 0x0000FF00, 0x00FF0000 };

这就是存红、绿、蓝三个颜色值,用的时候直接从数组里取,比如 MyColors[0] 就是红色。

常用colorref颜色对照表,方便查找直接拿来用。

虽然现在很多新框架都用更方便的颜色表示法,比如直接用颜色名字字符串,或者 CSS 那种 #RRGGBB 格式,但在一些比较底层的Windows编程,或者维护一些旧项目,或者用一些比较老的图形库的时候,还是会碰到这 COLORREF

COLORREF 就是个数值,代表BGR颜色。知道它的原理和怎么用 RGB 宏转换,用起来也没那么复杂。这回折腾也算是又熟悉一下这老伙计,以后再碰到就不会手忙脚乱。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]