如何在诺基亚6100上显示24位RGB Hex,而不是12位十六进制

时间:2011-11-22 02:37:45

标签: hex rgb

我正在使用Arduino Uno为诺基亚6100 LCD供电。在我的程序中,我使用RGB 8位输入,可以使用任何可用的在线转换工具转换为24位十六进制,我可以处理转换。但是,我使用的LCD库只允许12位十六进制。如何让LCD接受24位十六进制值而不是12位,并在屏幕上获得正确的颜色。或者在这种情况下有没有办法从24位十六进制转换为12位十六进制?

谢谢, 法伊兹

1 个答案:

答案 0 :(得分:2)

也许液晶显示器只能理解4位通道?无论如何,这听起来像是图书馆的限制:)

要从24位值(3通道x 8位/通道)转换为12位值(3通道x 4位/通道),只需缩小每个通道因子2 4 - 也就是说,将每个8位通道值[0-255]除以16,得到4位通道[0-15]中的近似值。

现在,考虑一下:“除以16”和“右移4”(非符号扩展)对于无符号2的补码整数实际上是相同的。也就是说,底部的4位只是“被抛出”。

想象一下这个24位值,以位为单位(以32位整数填充):

00000000RRRRrrrrGGGGggggBBBBbbbb 

这是目标值(以16位整数填充):

0000RRRRGGGGBBBB  // just get rid of the "small letter" bits :)

请注意,这可以通过一系列按位操作获得:

r12 = (hex24 >> 20) & 0xF
g12 = (hex24 >> 12) & 0xF
b12 = (hex24 >> 4) & 0xF
hex12 = (r12 << 8) | (g12 << 4) | b12

快乐的编码。