【问题标题】:How to display 24 bit RGB Hex on the Nokia 6100, instead of 12 bit Hex如何在诺基亚 6100 上显示 24 位 RGB 十六进制,而不是 12 位十六进制
【发布时间】:2012-01-03 12:16:52
【问题描述】:

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

谢谢, 法伊兹

【问题讨论】:

    标签: hex rgb


    【解决方案1】:

    也许 LCD 只能识别 4 位通道?无论如何,这听起来像是图书馆的极限:)

    要从 24 位值(3 通道 x 8 位/通道)转换为 12 位值(3 通道 x 4 位/通道),只需将每个通道缩小一个factor of 24 -- 即每个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
    

    编码愉快。

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2015-01-11
      • 2017-06-17
      • 2011-07-30
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多