如何从16位色深到18位色深?

时间:2009-06-29 07:06:18

标签: c++

  

可能重复:
  How to represent 18bit color depth to 16bit color depth?

我正在将一个由16位色深设备构建的软件移植到18位色深设备?如何表示18位颜色深度?感谢。

1 个答案:

答案 0 :(得分:0)

注意:这只是对我之前问题的答案的编辑,因为两者非常相似 - 你只需要改变这个过程。


首先,您必须访问每个颜色分量(即提取R值,G值和B值)。这样做的方式完全取决于颜色存储在内存中的方式。如果它存储为RGB,组件为5-6-5位,则可以使用以下内容:

blueComponent  = (colour & 0x3F);
greenComponent = (colour >>  6) & 0x3F;
redComponent   = (colour >> 12) & 0x3F;

这将为您提取颜色组件,然后您可以使用上面概述的方法转换每个组件(我假设18位将使用每个组件6位):

blueComponent  = (blueComponent  / 64.0) * 32;
//greenComponent = (greenComponent / 64.0) * 64;    //not needed
redComponent   = (redComponent   / 64.0) * 32;

请注意,使用上面的代码,使用 64.0 或其他一些方法来确保程序将数字表示为浮点数非常重要。然后将组件组合成18位颜色,使用:

colour = (redComponent << 11) | (greenComponent << 5) | blueComponent;