我有一个uint16_t color
需要转换为对应的RGB值。这个十六进制数前五位代表红色,接下来的六位代表绿色,最后五位代表蓝色。
到目前为止,我已经找到了一个接近解决方案但由于截断而不完全满足需求。
void hexToRGB(uint16_t hexValue)
{
int r = ((hexValue >> 11) & 0x1F); // Extract the 5 R bits
int g = ((hexValue >> 5) & 0x3F); // Extract the 6 G bits
int b = ((hexValue) & 0x1F); // Extract the 5 B bits
r = ((r * 255) / 31) - 4;
g = ((g * 255) / 63) - 2;
b = ((b * 255) / 31) - 4;
printf("r: %d, g: %d, b: %d\n",r, g, b);
}
int main()
{
//50712=0xC618
hexToRGB(50712);
return 0;
}
上面的例子产生了
r: 193, g: 192, b: 193
,应该是r: 192, g: 192, b: 192
。我一直在使用这个问题作为参考,但实际上我需要一个相反的解决方案,与他们所问的相反。
r
和b
乘以8,将g
乘以4——尽管这不会产生最纯净的白色(最白的颜色是(248, 252, 248)
)。 - Igor Tandetnik0.21 R + 0.72 G + 0.07 B
将彩色转换为灰度,那么你会发现绿色也占主导地位。 - Rudy Velthuis