OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...

请教emwin背景图片问题

查看数: 8387 | 评论数: 23 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-6-1 14:06

正文摘要:

最近在给研究给emwin加上背景图片,但是遇到些问题,请教一下大神们,我用的是ucosIII+emwin+LWIP+FATFS还有一些图片汉字显示的文件 问题1: emwin使用FATFS读取图片从哪里最快,我现在实现的是可以从nandflash和sp ...

回复

hanzixi_angel 发表于 2018-6-4 14:58:40
valon 发表于 2018-6-4 13:33
我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调 ...

底层驱动有问题吧  
kbq1950361006 发表于 2018-6-4 13:57:24
valon 发表于 2018-6-4 13:33
我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调 ...

你参考一下emwin扩展历程里的bmp图片显示实验,对你有帮助,我的函数就是从那里抠出来的
valon 发表于 2018-6-4 13:33:27
hanzixi_angel 发表于 2018-6-4 11:43
你放到存储设备里面吧  这样刷新会很快  800*480的图片应该在15ms左右

我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调用的,也就是说我800像素高,这个函数调用了800次 ,所以导致绘制很慢,这是什么情况啊啊而且放入存储设备也一样
valon 发表于 2018-6-4 13:28:43
kbq1950361006 发表于 2018-6-4 11:51
sdram时钟是108M的,你这个现象是没开启多层缓冲,WM_SetCreateFlags(WM_CF_MEMDEV); 你在初始化emwin之 ...

我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调用的,也就是说我800像素高,这个函数调用了800次 ,所以导致绘制很慢,这是什么情况啊啊
kbq1950361006 发表于 2018-6-4 12:11:30
分享一个好的图片网站,各种格式全都有,超级给力http://wallpaperswide.com
kbq1950361006 发表于 2018-6-4 11:51:33
valon 发表于 2018-6-4 11:34
兄dei 你这是sdram时钟频率是多少 ? 我用的429刷一个480*800的屏,就算先保存到sdram,显示bmp的时候很明 ...

sdram时钟是108M的,你这个现象是没开启多层缓冲,WM_SetCreateFlags(WM_CF_MEMDEV); 你在初始化emwin之后开启这个,然后分配给emwin大一点的sdram内存,最少也要2M,就看不出来刷新了。还有,我的bmp图片也是越大越慢,建议你把bmp图片压缩一下位数,我用4位的,很低很低了,你可以试试32,或者16位的,256位的图片效果虽然好但是影响速度,还有你可以试试楼上兄弟说的方式,很快的
kbq1950361006 发表于 2018-6-4 11:47:04
hanzixi_angel 发表于 2018-6-4 10:42
从flash中把.dta数据读到一个buf里,使用函数GUI_CreateBitmapFromStream(&DeskTop_Back, &Palette, Desk ...

非常感谢大兄弟,我先在解决了显示背景问题,方式有两种可以用一个是你这个方式,还有一个就是我之前的方式,后来把emwin的内存扩大了一些,原来有两个工程忘记去掉一个,导致一些莫名的现象字库消失问题,图片问题也顺带着解决了,现在切换界面不会看到屏幕刷新照片了,很快,看着舒服多了。再次感谢兄弟,你说的方式我刚刚看了一个帖子,讲的也很全面http://blog.sina.com.cn/s/blog_98ee3a930102wn6q.html
hanzixi_angel 发表于 2018-6-4 11:43:15
valon 发表于 2018-6-4 11:34
兄dei 你这是sdram时钟频率是多少 ? 我用的429刷一个480*800的屏,就算先保存到sdram,显示bmp的时候很明 ...

你放到存储设备里面吧  这样刷新会很快  800*480的图片应该在15ms左右
hanzixi_angel 发表于 2018-6-4 11:41:45
valon 发表于 2018-6-4 11:39
sdram的速度会不会太慢,影响刷新速度?我429刷一个1.4M的BMP流图片要大概1s...

SDRAM绝对跟得上你的刷新速度了  你刷图慢应该是刷新方式有问题  是用位图吗  还是直接解码图片刷新   直接解码图片速度慢
valon 发表于 2018-6-4 11:39:08
hanzixi_angel 发表于 2018-6-4 10:42
从flash中把.dta数据读到一个buf里,使用函数GUI_CreateBitmapFromStream(&DeskTop_Back, &Palette, Desk ...

sdram的速度会不会太慢,影响刷新速度?我429刷一个1.4M的BMP流图片要大概1s...
valon 发表于 2018-6-4 11:34:49
兄dei 你这是sdram时钟频率是多少 ? 我用的429刷一个480*800的屏,就算先保存到sdram,显示bmp的时候很明显看出一行行刷新 。刷一个1.4M大小的BMP图片要大概1s
hanzixi_angel 发表于 2018-6-4 10:42:15
kbq1950361006 发表于 2018-6-4 09:51
也是,我spiflash就用了字库,还有存一些数据,其实也可以不用文件系统,但是我这个用文件系统好管理一些 ...

从flash中把.dta数据读到一个buf里,使用函数GUI_CreateBitmapFromStream(&DeskTop_Back, &Palette, DeskTop_Buf);转换成位图;然后使用GUI_DrawBitmap(&DeskTop_Back, 0, 0);就可以显示位图图片了   这种方式显示非透明的图片是非常快的
kbq1950361006 发表于 2018-6-4 09:51:36
hanzixi_angel 发表于 2018-6-3 10:45
我没有使用文件系统  当时使用文件系统也是可以的   spi flash速度太慢  而且不太稳定  就放弃了   想这 ...

也是,我spiflash就用了字库,还有存一些数据,其实也可以不用文件系统,但是我这个用文件系统好管理一些,所以就用了,兄弟我现在还有一个问题,就是请问一下你是怎么把spiflash里的dta数据读到sdram里在显示了,这点我不太懂,麻烦兄弟指导一下啦
hanzixi_angel 发表于 2018-6-3 10:45:07
kbq1950361006 发表于 2018-6-3 00:31
兄弟,我今天试着把图片转成了dta格式的,请问是这个文件放在spiflash里就行吗,用文件系统吗?然后程序 ...

我没有使用文件系统  当时使用文件系统也是可以的   spi flash速度太慢  而且不太稳定  就放弃了   想这些系统级的文件 比如字库背景图片啥的一般都很少更改  所以没必要采用文件系统   一般都是出厂的时候烧写到特定的地址就不再动他了    以后都是开机读取就可以了   
kbq1950361006 发表于 2018-6-3 00:31:42
hanzixi_angel 发表于 2018-6-2 18:37
我是把图片用官方工具直接转成了位图文件  .dta文件   保存到外部flash   开机读取到外部SDRAM中  然后显 ...

兄弟,我今天试着把图片转成了dta格式的,请问是这个文件放在spiflash里就行吗,用文件系统吗?然后程序里怎么读出这个图片数据,我这点有点没想通,麻烦兄弟了
kbq1950361006 发表于 2018-6-2 18:48:03
hanzixi_angel 发表于 2018-6-2 18:37
我是把图片用官方工具直接转成了位图文件  .dta文件   保存到外部flash   开机读取到外部SDRAM中  然后显 ...

刚刚没看见这个回复,sorry,你这个方式肯定快,但是我们用的方式好像不太一样,我没有用底层的背景,我是建立一个Window窗口作为第一层背景的,其他界面就是这个层的子窗口,都是第二层,所以我切换界面就需要刷新背景图片,我试试你的方式,感谢感谢
kbq1950361006 发表于 2018-6-2 18:43:07

是呀,我先在方式就是读取spiflash里的bmp图片,bmp图片的位数被我改到很低才实现速度能好一些,图片是4位色的,,大神在给点建议能提高质量和速度,感激不尽
hanzixi_angel 发表于 2018-6-2 18:38:02
kbq1950361006 发表于 2018-6-1 18:06
计算了一下速度,大概有150多ms

150ms还是有点慢
hanzixi_angel 发表于 2018-6-2 18:37:45
kbq1950361006 发表于 2018-6-1 16:00
我现在开启了加载位图显示了,用spiflash存储bmp图片,效果还可以,也很快,请问你第二种方式把图片放到s ...

我是把图片用官方工具直接转成了位图文件  .dta文件   保存到外部flash   开机读取到外部SDRAM中  然后显示直接显示位图就可以了   使用的rgb库  只需要6-7ms就可以显示一张480*272的图片
我背景图片只在WM_HBKWIN中的WM_PAINT刷新  其他所有的界面都不在刷新  这样可以节省很多cpu时间
kbq1950361006 发表于 2018-6-1 16:00:43
hanzixi_angel 发表于 2018-6-1 14:39
加载到存储设备可以解决你这问题  加载到存储设备显示需要10ms   
另外就是把图片转化位位图保存到spi f ...

我现在开启了加载位图显示了,用spiflash存储bmp图片,效果还可以,也很快,请问你第二种方式把图片放到spiflash里是用文件系统,放bmp图片进去吗?还是把图片的数组数据放进去在读出来用

还有一个多余的小问题,请问你在用一个新窗口的时候加载背景图片时是在WM_PAINT这个条件里吗,我不确定我用方式的对不对
hanzixi_angel 发表于 2018-6-1 14:39:30
本帖最后由 hanzixi_angel 于 2018-6-1 14:40 编辑

加载到存储设备可以解决你这问题  加载到存储设备显示需要10ms   
另外就是把图片转化位位图保存到spi flash里面  直接读取到内存显示也可以  都是非常快的  我目前使用的第二种方案  显示一张480*272的位图需要6-7ms   原来直接显示图片需要500ms左右
kbq1950361006 发表于 2018-6-1 14:06:36
只能做到这样的效果了,研究了一天,先不弄这了,感觉这是我目前的极限了

VID_20180601_174102.rar

8.64 MB, 下载次数: 112



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-7-25 00:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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