RGB888 转 RGB565(TFT 开发)

本文介绍了在单片机驱动TFT屏过程中遇到的RGB888到RGB565颜色转换问题。通过详细解释16位真彩色的工作原理,提供了解决颜色转换的代码实现。在实际应用中,还讨论了初始化参数选择对于颜色顺序的影响,以及如何通过增加参数适应不同屏幕配置。
摘要由CSDN通过智能技术生成

(原文:https://blog.iyatt.com/?p=12867)
刚上手一块 TFT 屏,使用 Arduino 控制,在看 Adafruit-ST7735-Library 库的 demo 时,发现里面用的颜色值很奇怪,并不是一般用的每种基色取 0-255 的 RGB,然后才注意到注释写了 “565”
file

以前没用过这种颜色模式,查了一下就懂了。
一般用的 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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IYATT yx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值