我有一个生成灰度图像的程序。使用以下代码设置每个像素的灰度:
//loop over all pixel
*PixelColorPointer = Number * 0x010101;
在这种情况下,Number
是0到255之间的整数。它生成从黑到白的所有灰度颜色。
我尝试做的是有彩色图像(为了拥有false colors),但我真的不懂十六进制值的计算。我想出我是否指定例如Number * 0xFFFFFF
我有一个从白色到黄色的渐变/变化。
有人可以解释一下这种颜色的计算是如何工作的吗?请记住(如上所述)我希望/必须通过Number
变量才能获得变化。
答案 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
地点:)