C ++从灰度到颜色的颜色计算

时间:2016-11-13 16:45:55

标签: c++ pointers colors

我有一个生成灰度图像的程序。使用以下代码设置每个像素的灰度:

//loop over all pixel
    *PixelColorPointer = Number * 0x010101;

在这种情况下,Number是0到255之间的整数。它生成从黑到白的所有灰度颜色。

我尝试做的是有彩色图像(为了拥有false colors),但我真的不懂十六进制值的计算。我想出我是否指定例如Number * 0xFFFFFF我有一个从白色到黄色的渐变/变化。

有人可以解释一下这种颜色的计算是如何工作的吗?请记住(如上所述)我希望/必须通过Number变量才能获得变化。

2 个答案:

答案 0 :(得分:0)

您需要提供更多信息。你用什么功能库来做这个?

但是通过看到问题,我认为十六进制数字是指颜色十六进制代码中的color数字将指的是亮度0为空白,255为最大颜色强度(白色)

编辑:其实我认为整个数字来自:

Number * 0x010101

是十六进制颜色代码,在 0x010101 的特定情况下,数字用作强度。但是任何其他十六进制都会给你一些奇怪的结果。

使用Color-hex代码表选择任意颜色并输入:

*PixelColorPointer = 0XHEXCODE;

如果输出是所需的颜色,那么我就是

答案 1 :(得分:0)

RGB颜色逐字节存储(0到255)。

当您说0x010203它是(十六进制)01红色,02绿色和03蓝色时。它也可以反转(03红色,02绿色,01蓝色),具体取决于您的Endianness

在这里你必须分开你的3种颜色。然后你应该将每种颜色乘以它的系数。

您可以将颜色存储在联合中,这是最简单的方法。

union Color
{
  struct
  {
    unsigned char b;
    unsigned char g;
    unsigned char r;
    unsigned char a; // Useless here
  };
  unsigned int full;
};

Color c;
c.full = 0x102030;

unsigned char res = 0.229 * c.r + 0.587 * c.g + 0.114 * c.b;

Color grey;
grey.r = grey.g = grey.b = res;

0.229,0.587和0.114是Relative luminance

请记住,您可能需要反转rgba顺序并移动a地点:)