搜索
bottom↓
回复: 15

BMP图像18位转16位问题咨询

[复制链接]

出0入0汤圆

发表于 2024-3-24 19:27:33 | 显示全部楼层 |阅读模式
100汤圆
        硬件芯片使用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芯片的数据转换规则是怎么样的?

附件: 您需要 登录 才可以下载或查看,没有帐号?注册

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入984汤圆

发表于 2024-3-24 20:23:12 | 显示全部楼层
把低位砍了再位移就可以了吧 目前回读"有杂质"的图有对比吗

出200入2554汤圆

发表于 2024-3-24 22:55:28 来自手机 | 显示全部楼层
显示屏读回数据,是要做任意形状透明显示吧。

RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配固定调色盘了,这个还得是你多实验下。

或者换思路,TFT只写不读,透明运算涉及的缓存全在单片机这边搞定

出0入0汤圆

 楼主| 发表于 2024-3-24 23:44:30 | 显示全部楼层
t3486784401 发表于 2024-3-24 22:55
显示屏读回数据,是要做任意形状透明显示吧。

RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配 ...
(引用自3楼)

对的,方法有解决了,实际效果好像一般。 如果要显示PNG图片,有相关的方法可以实现的了吗

出0入0汤圆

 楼主| 发表于 2024-3-24 23:47:38 | 显示全部楼层
t3486784401 发表于 2024-3-24 22:55
显示屏读回数据,是要做任意形状透明显示吧。

RGB565 转 RGB666 有多种方式,甚至有些场合直接是给你适配 ...
(引用自3楼)

单片机要显示PNG格式可以实现的了嘛

出200入2554汤圆

发表于 2024-3-25 00:22:45 | 显示全部楼层
qqTOTORO 发表于 2024-3-24 23:44
对的,方法有解决了,实际效果好像一般。 如果要显示PNG图片,有相关的方法可以实现的了吗 ...
(引用自4楼)

我低端的单片机玩得多;ARM 能跑,但都是现成软件库

单片机软解 PNG,算法费劲+吃资源,到头来不如直接运算成 BMP+蒙版 来的划算。

我在 Arduino 的全局库当中帮你找下(包括给 32bit-ARM 用的库),
这个 PNGdec 直接要 48KB 运行内存,还没算上 FLASH 消耗:



当然如果有 OS,这都不是事儿。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出200入2554汤圆

发表于 2024-3-25 00:37:24 | 显示全部楼层
qqTOTORO 发表于 2024-3-24 23:47
单片机要显示PNG格式可以实现的了嘛
(引用自5楼)

库我帮你下下来了,C++ 源码,单片机足够大可以考虑折腾:

原始地址: https://downloads.arduino.cc/lib ... k2/PNGdec-1.0.1.zip

项目地址: https://github.com/bitbank2/PNGdec

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2024-3-25 08:12:24 | 显示全部楼层
楼上真是热心人,赞一个。

出1310入193汤圆

发表于 2024-3-25 08:28:57 | 显示全部楼层
t3486784401 发表于 2024-3-25 00:37
库我帮你下下来了,C++ 源码,单片机足够大可以考虑折腾:

原始地址: https://downloads.arduino.cc/l ...
(引用自7楼)

热心坛友  为你点赞

出0入0汤圆

 楼主| 发表于 2024-3-25 23:25:15 | 显示全部楼层
t3486784401 发表于 2024-3-25 00:22
我低端的单片机玩得多;ARM 能跑,但都是现成软件库

单片机软解 PNG,算法费劲+吃资源,到头来不如直接 ...
(引用自6楼)

谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融入的效果。有什么好的思路吗

出330入1862汤圆

发表于 2024-3-25 23:55:01 | 显示全部楼层
qqTOTORO 发表于 2024-3-25 23:25
谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融 ...
(引用自10楼)

32位BMP带有一个alpha通道可以表达透明部分,压缩一点的话,也有16位带alpha的bmp,4位红色4位绿色4位蓝色4位透明。
当然,可以使用自定义位数,比如只有透明和不透明的部分,那么使用RGB555,然后多出来的一位表示透明。

出200入2554汤圆

发表于 2024-3-26 02:27:49 来自手机 | 显示全部楼层
qqTOTORO 发表于 2024-3-25 23:25
谢谢,这个BMP+蒙版的方法我也有想过,但是好像没办法解决PNG半透明部分的显示,背景图如何跟图像做出融 ...
(引用自10楼)

本质都是 alpha 渲染,每个像素多一个 alpha 通道。

对于蒙版式前后景,相当于alpha 通道是二值的(0 vs 255);
对于 PNG 透明像素,alpha 通道是可以有灰度的,一般8bit (0-255).

至于怎么在屏上画,肯定要缓冲背景(或者读回背景)然后前后景按照 alpha 比例混合

出0入224汤圆

发表于 2024-3-26 07:32:20 来自手机 | 显示全部楼层
要不直接用lvgl

出0入0汤圆

 楼主| 发表于 2024-3-27 17:19:31 | 显示全部楼层
t3486784401 发表于 2024-3-26 02:27
本质都是 alpha 渲染,每个像素多一个 alpha 通道。

对于蒙版式前后景,相当于alpha 通道是二值的(0 vs ...
(引用自12楼)

好的谢谢你,alpha通道像素应该是有一个混合的计算方法可以实现是吧,

出0入0汤圆

 楼主| 发表于 2024-3-27 17:42:26 | 显示全部楼层
t3486784401 发表于 2024-3-26 02:27
本质都是 alpha 渲染,每个像素多一个 alpha 通道。

对于蒙版式前后景,相当于alpha 通道是二值的(0 vs ...
(引用自12楼)

有关于alpha 通道显示原理的资料帮我找点吗

出0入4汤圆

发表于 2024-3-27 19:12:22 来自手机 | 显示全部楼层
有个stb lib,里面有图形库,可以看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 14:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表