OpenEdv-开源电子网

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

请教emwin背景图片问题

[复制链接]

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2018-6-1 14:06:35 | 显示全部楼层 |阅读模式
10金钱
最近在给研究给emwin加上背景图片,但是遇到些问题,请教一下大神们,我用的是ucosIII+emwin+LWIP+FATFS还有一些图片汉字显示的文件
问题1: emwin使用FATFS读取图片从哪里最快,我现在实现的是可以从nandflash和spiflash里读取图片,都可以读,但是系统运行起来明显卡顿,点一个button得反应2秒然后加载出来的界面在反应几秒,一下子心情就不好了。
问题2:读取图片是什么格式的最好,我现在实现的读取jpg和bmp格式的,起初我用bmp发现卡顿,我以为是文件大,bmp一张800*480的就要750K,jpg的几十K就搞定了,但是jpg的还是有明显卡顿的问题
问题3:我在开启emwin的窗口存储设备之后,加载图片不会看出来刷新,但是就会卡顿了,有没有办法能让速度上来吗,还是我分配内存的问题啊?我给emwin分配8M内存,sdram一共32M,开发板用的是F767的核心板,资源很充足啊

最佳答案

查看完整内容[请看2#楼]

只能做到这样的效果了,研究了一天,先不弄这了,感觉这是我目前的极限了
qq1950361006,互帮互助,共同进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-1 14:06:36 | 显示全部楼层
只能做到这样的效果了,研究了一天,先不弄这了,感觉这是我目前的极限了

VID_20180601_174102.rar

8.64 MB, 下载次数: 112

qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-1 14:39:30 | 显示全部楼层
本帖最后由 hanzixi_angel 于 2018-6-1 14:40 编辑

加载到存储设备可以解决你这问题  加载到存储设备显示需要10ms   
另外就是把图片转化位位图保存到spi flash里面  直接读取到内存显示也可以  都是非常快的  我目前使用的第二种方案  显示一张480*272的位图需要6-7ms   原来直接显示图片需要500ms左右
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-1 16:00:43 | 显示全部楼层
hanzixi_angel 发表于 2018-6-1 14:39
加载到存储设备可以解决你这问题  加载到存储设备显示需要10ms   
另外就是把图片转化位位图保存到spi f ...

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

还有一个多余的小问题,请问你在用一个新窗口的时候加载背景图片时是在WM_PAINT这个条件里吗,我不确定我用方式的对不对
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-1 18:06:06 | 显示全部楼层
计算了一下速度,大概有150多ms
QQ截图20180601180343.jpg
QQ截图20180601180413.jpg
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 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时间
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-2 18:38:02 | 显示全部楼层
kbq1950361006 发表于 2018-6-1 18:06
计算了一下速度,大概有150多ms

150ms还是有点慢
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-2 18:43:07 | 显示全部楼层

是呀,我先在方式就是读取spiflash里的bmp图片,bmp图片的位数被我改到很低才实现速度能好一些,图片是4位色的,,大神在给点建议能提高质量和速度,感激不尽
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-2 18:48:03 | 显示全部楼层
hanzixi_angel 发表于 2018-6-2 18:37
我是把图片用官方工具直接转成了位图文件  .dta文件   保存到外部flash   开机读取到外部SDRAM中  然后显 ...

刚刚没看见这个回复,sorry,你这个方式肯定快,但是我们用的方式好像不太一样,我没有用底层的背景,我是建立一个Window窗口作为第一层背景的,其他界面就是这个层的子窗口,都是第二层,所以我切换界面就需要刷新背景图片,我试试你的方式,感谢感谢
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-3 00:31:42 | 显示全部楼层
hanzixi_angel 发表于 2018-6-2 18:37
我是把图片用官方工具直接转成了位图文件  .dta文件   保存到外部flash   开机读取到外部SDRAM中  然后显 ...

兄弟,我今天试着把图片转成了dta格式的,请问是这个文件放在spiflash里就行吗,用文件系统吗?然后程序里怎么读出这个图片数据,我这点有点没想通,麻烦兄弟了
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-3 10:45:07 | 显示全部楼层
kbq1950361006 发表于 2018-6-3 00:31
兄弟,我今天试着把图片转成了dta格式的,请问是这个文件放在spiflash里就行吗,用文件系统吗?然后程序 ...

我没有使用文件系统  当时使用文件系统也是可以的   spi flash速度太慢  而且不太稳定  就放弃了   想这些系统级的文件 比如字库背景图片啥的一般都很少更改  所以没必要采用文件系统   一般都是出厂的时候烧写到特定的地址就不再动他了    以后都是开机读取就可以了   
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-4 09:51:36 | 显示全部楼层
hanzixi_angel 发表于 2018-6-3 10:45
我没有使用文件系统  当时使用文件系统也是可以的   spi flash速度太慢  而且不太稳定  就放弃了   想这 ...

也是,我spiflash就用了字库,还有存一些数据,其实也可以不用文件系统,但是我这个用文件系统好管理一些,所以就用了,兄弟我现在还有一个问题,就是请问一下你是怎么把spiflash里的dta数据读到sdram里在显示了,这点我不太懂,麻烦兄弟指导一下啦
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 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);就可以显示位图图片了   这种方式显示非透明的图片是非常快的
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2018-5-28
在线时间
9 小时
发表于 2018-6-4 11:34:49 | 显示全部楼层
兄dei 你这是sdram时钟频率是多少 ? 我用的429刷一个480*800的屏,就算先保存到sdram,显示bmp的时候很明显看出一行行刷新 。刷一个1.4M大小的BMP图片要大概1s
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2018-5-28
在线时间
9 小时
发表于 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...
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-4 11:41:45 | 显示全部楼层
valon 发表于 2018-6-4 11:39
sdram的速度会不会太慢,影响刷新速度?我429刷一个1.4M的BMP流图片要大概1s...

SDRAM绝对跟得上你的刷新速度了  你刷图慢应该是刷新方式有问题  是用位图吗  还是直接解码图片刷新   直接解码图片速度慢
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-4 11:43:15 | 显示全部楼层
valon 发表于 2018-6-4 11:34
兄dei 你这是sdram时钟频率是多少 ? 我用的429刷一个480*800的屏,就算先保存到sdram,显示bmp的时候很明 ...

你放到存储设备里面吧  这样刷新会很快  800*480的图片应该在15ms左右
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 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
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 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位的图片效果虽然好但是影响速度,还有你可以试试楼上兄弟说的方式,很快的
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-4 12:11:30 | 显示全部楼层
分享一个好的图片网站,各种格式全都有,超级给力http://wallpaperswide.com
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2018-5-28
在线时间
9 小时
发表于 2018-6-4 13:28:43 | 显示全部楼层
kbq1950361006 发表于 2018-6-4 11:51
sdram时钟是108M的,你这个现象是没开启多层缓冲,WM_SetCreateFlags(WM_CF_MEMDEV); 你在初始化emwin之 ...

我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调用的,也就是说我800像素高,这个函数调用了800次 ,所以导致绘制很慢,这是什么情况啊啊
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2018-5-28
在线时间
9 小时
发表于 2018-6-4 13:33:27 | 显示全部楼层
hanzixi_angel 发表于 2018-6-4 11:43
你放到存储设备里面吧  这样刷新会很快  800*480的图片应该在15ms左右

我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调用的,也就是说我800像素高,这个函数调用了800次 ,所以导致绘制很慢,这是什么情况啊啊而且放入存储设备也一样
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-4 13:57:24 | 显示全部楼层
valon 发表于 2018-6-4 13:33
我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调 ...

你参考一下emwin扩展历程里的bmp图片显示实验,对你有帮助,我的函数就是从那里抠出来的
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-6-4 14:58:40 | 显示全部楼层
valon 发表于 2018-6-4 13:33
我发现一个很大的问题啊,就是在驱动中绘制bitmap图像的函数是 _DrawBitmap,而我在绘图的时候是一行行调 ...

底层驱动有问题吧  
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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