我正在开发一个带有 TFT 触摸屏的项目。这个屏幕有一个包含的库。但是经过一些阅读,我仍然没有得到任何东西。在库中有一些关于颜色的定义:
/* some RGB color definitions */
#define Black 0x0000 /* 0, 0, 0 */
#define Navy 0x000F /* 0, 0, 128 */
#define DarkGreen 0x03E0 /* 0, 128, 0 */
#define DarkCyan 0x03EF /* 0, 128, 128 */
#define Maroon 0x7800 /* 128, 0, 0 */
#define Purple 0x780F /* 128, 0, 128 */
#define Olive 0x7BE0 /* 128, 128, 0 */
#define LightGrey 0xC618 /* 192, 192, 192 */
#define DarkGrey 0x7BEF /* 128, 128, 128 */
#define Blue 0x001F /* 0, 0, 255 */
#define Green 0x07E0 /* 0, 255, 0 */
#define Cyan 0x07FF /* 0, 255, 255 */
#define Red 0xF800 /* 255, 0, 0 */
#define Magenta 0xF81F /* 255, 0, 255 */
#define Yellow 0xFFE0 /* 255, 255, 0 */
#define White 0xFFFF /* 255, 255, 255 */
#define Orange 0xFD20 /* 255, 165, 0 */
#define GreenYellow 0xAFE5 /* 173, 255, 47 */
#define Pink 0xF81F
这些是 16 位颜色。但是它们如何从:0、128、128(深青色)到 0x03EF。我的意思是,如何将 16 位颜色转换为 uint16?这不需要在代码中有答案,因为我只想在库中添加一些颜色。一个在线转换器的链接(我找不到)也可以:)
谢谢
原文由 Bart Teunissen 发布,翻译遵循 CC BY-SA 4.0 许可协议
从这些可以很容易地找出公式:
F800 设置了 5 个 MSB 位,而 FFE0 设置了 5 个 LSB 未设置。 0xF81F 显然有 5 个 LSB 和 5 个 MSB 的集合,这证明格式是 RGB565。
将值 173 转换为红色的公式并不像看起来那么简单——您不能简单地删除 3 个最低有效位,而是必须进行线性插值以使 255 对应于 31(或绿色 255 对应于63)。
(这仍然只是一个截断除法——可能需要适当的舍入)
使用适当的舍入和缩放:
编辑 按照 JasonD 的有益建议添加了括号。