硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2417|回复: 22
收起左侧

[emWin] 图片数据放到外部flash的问题

[复制链接]

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2019-3-14 14:18:53 | 显示全部楼层 |阅读模式
各位大大请问一个问题:        我把有透明度的PNG图片用BmpCvt.exe另存为True color with alpha格式的C文件放在内部flash中程序调用GUI_DrawBitmap函数可以正常显示透明度,图片能完美显示。现在因为图片太多,全部放在内部flash不现实,而且不方便后续图片的更新,所以把图片数据通过文件系统全部保存到外部flash中,那么问题来了!!!
      1、直接将bmp或者ipg的图片烧写到外部flash,通过GUI_DraWBitmap等函数显示时不能正确的显示透明度。
      2、基于bmp,jpg不能显示透明度,那么将图片统一改成PNG格式,后面通过移植png库,将png的图片显示出来,但是png的渲染不够,导致了png图片在一些特定的场合,透明度不完全透明,显示不够完美。

     基于以上几点,我想到的方式是将png的图片先用BmpCvt.exe生成True color with alpha格式的数据,然后将这些数据放到外部flash,但是这个方式有个问题就是我的程序怎么去索引到这个一段数据的地址?,并将其显示?

    目前还没想到好的方法,请路过的大佬指点,指点,非常感谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-14 14:24:29 | 显示全部楼层
直接显示带透明通道的BMP图片要先调用此函数
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-14 14:24:31 | 显示全部楼层
直接显示带透明通道的BMP图片要先调用此函数
QQ截图20190314142236.jpg
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-3-14 16:06:25 | 显示全部楼层
图片较多时,外部Falsh一般用哪种比较好?用SPI Flash显示的时候还需要加载到RAM中才行,需要容量大的RAM来支持,用NAND Flash不知道可靠性怎么样?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-14 16:12:06 | 显示全部楼层
爱恋之燕 发表于 2019-3-14 16:06
图片较多时,外部Falsh一般用哪种比较好?用SPI Flash显示的时候还需要加载到RAM中才行,需要容量大的RAM来 ...

QSPI:

过段时间H7的QSPI发布,可以参考:
STM32H7驱动QSPI Flash的4线DMA模式,读速度48MB/S左右,还不错
http://www.armbbs.cn/forum.ph ... id=91616&fromuid=58
(出处: 安富莱电子论坛)

基于STM32H7驱动QSPI Flash的FatFS文件系统 + QSPI Flash虚拟U盘实现,读速度24.6MB/S
http://www.armbbs.cn/forum.ph ... id=91634&fromuid=58
(出处: 安富莱电子论坛)
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-3-14 16:15:27 | 显示全部楼层
用QSPI,CPU可以直接寻址吗?不然的话,还是得先要加载到RAM
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-14 16:16:23 | 显示全部楼层
爱恋之燕 发表于 2019-3-14 16:15
用QSPI,CPU可以直接寻址吗?不然的话,还是得先要加载到RAM

可以,支持内存模式。
其实没必要加载到内存了,使用xxxEx函数即可,速度飞快,飞一般的感觉。
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-3-14 16:23:02 | 显示全部楼层
用普通的SPI Flash,使用xxxEx函数速度怎么样?STM32F429没有QSPI接口
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-14 17:16:53 | 显示全部楼层
爱恋之燕 发表于 2019-3-14 16:23
用普通的SPI Flash,使用xxxEx函数速度怎么样?STM32F429没有QSPI接口

我们V6的字库是采用的这方式,速度还可以,不要使用文件系统,裸机方式。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-14 19:23:29 | 显示全部楼层
eric2013 发表于 2019-3-14 14:24
直接显示带透明通道的BMP图片要先调用此函数

这个没试过,谢谢大佬的指点,稍后尝试一下
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-14 20:20:54 | 显示全部楼层
eric2013 发表于 2019-3-14 14:24
直接显示带透明通道的BMP图片要先调用此函数

很奇怪,使用GUI_BMP_Draw函数前加GUI_BMP_EnableAlpha函数时,不能正常显示BMP图片,屏蔽后能显示带不透明色彩的BMP图片
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-15 01:41:29 | 显示全部楼层
小蜀黎 发表于 2019-3-14 20:20
很奇怪,使用GUI_BMP_Draw函数前加GUI_BMP_EnableAlpha函数时,不能正常显示BMP图片,屏蔽后能显示带不透 ...

直接用B2C换成成C数组,然后模拟器上面测测,再将测试部分代码上传到论坛,我看看。

另外你的图片原始文件上传下。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-19 10:58:24 | 显示全部楼层
eric2013 发表于 2019-3-15 01:41
直接用B2C换成成C数组,然后模拟器上面测测,再将测试部分代码上传到论坛,我看看。

另外你的图片原始 ...

能完美显示的是通过BmpCvt.exe生成.c文件,然后通过GUI_DrawBitmap函数显示,这个没啥代码,就一个函数。将BMP数据存放在外部flash,然后显示,这个是参考V6的例程完成的(实际上就是套用),今天UI给了新的BMP格式,显示的时候有点奇怪,原本是金色的图片,变成显示成蓝色的了
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-19 11:08:37 | 显示全部楼层
本帖最后由 小蜀黎 于 2019-3-19 11:10 编辑
小蜀黎 发表于 2019-3-19 10:58
能完美显示的是通过BmpCvt.exe生成.c文件,然后通过GUI_DrawBitmap函数显示,这个没啥代码,就一个函数。 ...

这个是显示的bmp图片代码
c9da003388192b41a559cf8cc1c71a2e.png
这个两个是原始的BMP格式图片
power_big.bmp pot_temperature.bmp
这个是打开GUI_BMP_EnableAlpha的显示效果,
333.png

这个是关闭GUI_BMP_EnableAlpha的显示效果
2222.png

大佬帮忙看看是什么情况,非常感谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-19 12:01:14 | 显示全部楼层
小蜀黎 发表于 2019-3-19 10:58
能完美显示的是通过BmpCvt.exe生成.c文件,然后通过GUI_DrawBitmap函数显示,这个没啥代码,就一个函数。 ...

是否方便直接用B2C.exe换成成C数组,然后模拟器上面测测,再将测试部分代码上传到论坛,方便我直接帮你测试。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-19 13:57:13 | 显示全部楼层
eric2013 发表于 2019-3-19 12:01
是否方便直接用B2C.exe换成成C数组,然后模拟器上面测测,再将测试部分代码上传到论坛,方便我直接帮你测 ...

这个很麻烦,我司所有文件都是加密的,发不出去,只能说步骤,代码发不出去
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-19 16:34:40 | 显示全部楼层
本帖最后由 小蜀黎 于 2019-3-19 16:38 编辑
eric2013 发表于 2019-3-19 12:01
是否方便直接用B2C.exe换成成C数组,然后模拟器上面测测,再将测试部分代码上传到论坛,方便我直接帮你测 ...

已经完美解决这个透明度的问题了,使用流文件解决:解决步骤:1、使用BmpCvt.exe将数据保存成.dta文件
                  2、通过文件系统烧写到外部flash
                  3、通过以下接口函数调用
Auto.png
   PS:大佬可以增加一个流文件的控制例程

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2019-3-19 18:52:26 | 显示全部楼层
小蜀黎 发表于 2019-3-19 16:34
已经完美解决这个透明度的问题了,使用流文件解决:解决步骤:1、使用BmpCvt.exe将数据保存成.dta文件
  ...

这个有例程:
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1

QQ截图20190319185219.jpg
QQ截图20190319185121.jpg
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2019-3-20 08:56:27 | 显示全部楼层
小蜀黎 发表于 2019-3-19 16:34
已经完美解决这个透明度的问题了,使用流文件解决:解决步骤:1、使用BmpCvt.exe将数据保存成.dta文件
  ...

我的产品就是使用这个方式。如果整机内存很小,还要跟内存大小、图片尺寸要做平衡做协调。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-20 09:42:50 | 显示全部楼层
eric2013 发表于 2019-3-19 18:52
这个有例程:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834&extra=page%3D1

嗯嗯,之前没有完全看文档, 这个确实是疏忽了,谢谢!
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2019-3-20 09:43:17 | 显示全部楼层
廷润 发表于 2019-3-20 08:56
我的产品就是使用这个方式。如果整机内存很小,还要跟内存大小、图片尺寸要做平衡做协调。

内存小,确实是需要协调
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2019-3-20 16:56:55 | 显示全部楼层
小蜀黎 发表于 2019-3-19 16:34
已经完美解决这个透明度的问题了,使用流文件解决:解决步骤:1、使用BmpCvt.exe将数据保存成.dta文件
  ...

这个解决方案,还是需要将.dta文件加载到RAM,占内存.
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2019-3-21 08:39:27 | 显示全部楼层
hb_ll 发表于 2019-3-20 16:56
这个解决方案,还是需要将.dta文件加载到RAM,占内存.

如果是穷配置,要跟很多方面做战斗的,RAM,FLASH,TIME以及OS或者CPU的资源抢占等等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 20:15 , Processed in 0.238407 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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