(原文:https://blog.iyatt.com/?p=12867)
刚上手一块 TFT 屏,使用 Arduino 控制,在看 Adafruit-ST7735-Library 库的 demo 时,发现里面用的颜色值很奇怪,并不是一般用的每种基色取 0-255 的 RGB,然后才注意到注释写了 “565”
以前没用过这种颜色模式,查了一下就懂了。
一般用的 RGB 值每种基色是 256 个级别,也就是 $$2^8$$
,每个基色是一个 8 位数,所以称为 RGB888,三个基色共 24 位,也就是 24 位真彩色。
这个 565 就是 R、G、B 位数分别是 5、6、5,总共 16 位,即 16 位真彩色。
要进行颜色转换的话,首先要从 RGB888 的颜色值中分别提取出三个基色的颜色值。最左边的 8 位是 R,中间的 8 位是 G,最右边的 8 位是 B。先用与运算就可以将对应基色外的数值清零,再位移取出来。
uint8_t r8 = (rgb888 & 0xFF0000) >> 16;
uint8_t g8 = (rgb888 & 0x00FF00) >> 8;
uint8_t b8 = (rgb888 & 0x0000FF);
此时取出来的每种基色是 8 位的,R 和 B 要 5 位,所以右移 3 位,G 要 6 位,所以右移 2 位。R 放到最左边 5 位,所以左移 5 位,G 放在中间 6 位,所以左移 5 位,B 放在最右边 5 位,无需额外处理。
uint8_t r5 =