BMP图像18位转16位问题咨询
硬件芯片使用ST7789V驱动320x*240的显示屏,显示的图片都是用16bit(R:5bit G:6bit B:5bit)的BMP图片。现在需要用到从显示屏读屏幕显示数据回来,查看手册发现ST7789V数据都是18bit(即RGB分别是6bit数据位),输入的16bit的图片数据会被芯片自动转换成18bit才存储到芯片缓存。
现在实际测试单片机从ST7789V读数据回来,发现18bit的数据没办法完整转换成16bit图,R和B两个颜色都少了一个bit,观察数据发现,16bit到18bit也不是简单的把数据搬过去,有的数据搬过去RGB三个通道值都变化了。导致图片实际显示有杂质。
请问有精通这块的大神能分享一下16bit转18bit(和18bit转16bit) BMP图片一般数据转换方式是怎么样的,或是ST7789V芯片的数据转换规则是怎么样的? 把低位砍了再位移就可以了吧 目前回读"有杂质"的图有对比吗 显示屏读回数据,是要做任意形状透明显示吧。
RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配固定调色盘了,这个还得是你多实验下。
或者换思路,TFT只写不读,透明运算涉及的缓存全在单片机这边搞定 t3486784401 发表于 2024-3-24 22:55
显示屏读回数据,是要做任意形状透明显示吧。
RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配 ...
(引用自3楼)
对的,方法有解决了,实际效果好像一般。{:smile:} 如果要显示PNG图片,有相关的方法可以实现的了吗 t3486784401 发表于 2024-3-24 22:55
显示屏读回数据,是要做任意形状透明显示吧。
RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配 ...
(引用自3楼)
单片机要显示PNG格式可以实现的了嘛 qqTOTORO 发表于 2024-3-24 23:44
对的,方法有解决了,实际效果好像一般。 如果要显示PNG图片,有相关的方法可以实现的了吗 ...
(引用自4楼)
我低端的单片机玩得多;ARM 能跑,但都是现成软件库
单片机软解 PNG,算法费劲+吃资源,到头来不如直接运算成 BMP+蒙版 来的划算。
我在 Arduino 的全局库当中帮你找下(包括给 32bit-ARM 用的库),
这个 PNGdec 直接要 48KB 运行内存,还没算上 FLASH 消耗:
当然如果有 OS,这都不是事儿。 qqTOTORO 发表于 2024-3-24 23:47
单片机要显示PNG格式可以实现的了嘛
(引用自5楼)
库我帮你下下来了,C++ 源码,单片机足够大可以考虑折腾:
原始地址: https://downloads.arduino.cc/libraries/github.com/bitbank2/PNGdec-1.0.1.zip
项目地址: https://github.com/bitbank2/PNGdec 楼上真是热心人,赞一个。 t3486784401 发表于 2024-3-25 00:37
库我帮你下下来了,C++ 源码,单片机足够大可以考虑折腾:
原始地址: https://downloads.arduino.cc/l ...
(引用自7楼)
热心坛友为你点赞 t3486784401 发表于 2024-3-25 00:22
我低端的单片机玩得多;ARM 能跑,但都是现成软件库
单片机软解 PNG,算法费劲+吃资源,到头来不如直接 ...
(引用自6楼)
谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融入的效果。有什么好的思路吗 qqTOTORO 发表于 2024-3-25 23:25
谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融 ...
(引用自10楼)
32位BMP带有一个alpha通道可以表达透明部分,压缩一点的话,也有16位带alpha的bmp,4位红色4位绿色4位蓝色4位透明。
当然,可以使用自定义位数,比如只有透明和不透明的部分,那么使用RGB555,然后多出来的一位表示透明。 qqTOTORO 发表于 2024-3-25 23:25
谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融 ...
(引用自10楼)
本质都是 alpha 渲染,每个像素多一个 alpha 通道。
对于蒙版式前后景,相当于alpha 通道是二值的(0 vs 255);
对于 PNG 透明像素,alpha 通道是可以有灰度的,一般8bit (0-255).
至于怎么在屏上画,肯定要缓冲背景(或者读回背景)然后前后景按照 alpha 比例混合
温铁军:中国房地产泡沫危机开始产生!
要不直接用lvgl t3486784401 发表于 2024-3-26 02:27本质都是 alpha 渲染,每个像素多一个 alpha 通道。
对于蒙版式前后景,相当于alpha 通道是二值的(0 vs ...
(引用自12楼)
好的谢谢你,alpha通道像素应该是有一个混合的计算方法可以实现是吧, t3486784401 发表于 2024-3-26 02:27
本质都是 alpha 渲染,每个像素多一个 alpha 通道。
对于蒙版式前后景,相当于alpha 通道是二值的(0 vs ...
(引用自12楼)
有关于alpha 通道显示原理的资料帮我找点吗{:lol:} 有个stb lib,里面有图形库,可以看看
页:
[1]