野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12482|回复: 9

STemWin JPEG刷新好慢啊

[复制链接]
发表于 2018-7-2 14:46:11 | 显示全部楼层 |阅读模式
/*
*********************************************************************************************************
* 函 数 名: _ShowJPEG2
* 功能说明: 显示JPEG图片
* 形    参:
* 返 回 值: 返回绘制了JPEG图片的内存设备句柄。
*********************************************************************************************************
*/
GUI_HMEM _ShowJPEG2(void)
{
char *_acBuffer;
GUI_HMEM hMem;
GUI_MEMDEV_Handle hMemJPEG;
  
/* 申请一块内存空间 并且将其清零 */
hMem = GUI_ALLOC_AllocZero(98720UL + 1);  //实际图片大小 98720UL + 1

/* 将申请到内存的句柄转换成指针类型 */
_acBuffer = GUI_ALLOC_h2p(hMem);
/* 读取文件到动态内存 */
CopyPicToSRAM(_acBuffer); //把图片内容复制到申请的内存中

GUI_JPEG_GetInfo(_acBuffer, PIC_LEN, &JpegInfo);

/* 创建内存设备,并将JPEG图片绘制到此内存设备里面,此内存设备要在主程序中用到
    所以退出此函数前,不要释放。
*/
hMemJPEG = GUI_MEMDEV_CreateEx(0, 0, JpegInfo.XSize, JpegInfo.YSize, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hMemJPEG);
GUI_JPEG_Draw(_acBuffer, PIC_LEN, 0, 0);
GUI_MEMDEV_Select(0);

/* 释放动态内存hMem */
GUI_ALLOC_Free(hMem);

return hMemJPEG;
}

主函数里使用:

  hMemJPEG = _ShowJPEG2();  /* 加载JPEG图片到内存设备 */

  GUI_MEMDEV_WriteAt(hMemJPEG, 0, 0);/* 显示图片 */

按照上述步骤,我已经把JPEG放到动态缓存了,为什么显示还是很慢,从0,0




回复

使用道具 举报

发表于 2018-7-2 15:22:10 | 显示全部楼层
这个也不知道emwin的是什么实现机制,只能这个速度了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-2 15:28:37 | 显示全部楼层
巢易白 发表于 2018-7-2 15:22
这个也不知道emwin的是什么实现机制,只能这个速度了

152541.jpg 但是看其他教程上有说可以解决,我程序就按这思路的,但还是慢,我怀疑我哪个环节里漏了

回复 支持 反对

使用道具 举报

发表于 2018-7-2 15:30:52 | 显示全部楼层
不忘初_Wc6CC 发表于 2018-7-2 15:28
但是看其他教程上有说可以解决,我程序就按这思路的,但还是慢,我怀疑我哪个环节里漏了

这是先加载到SRAM了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-2 15:43:04 | 显示全部楼层
本帖最后由 不忘初_Wc6CC 于 2018-7-2 15:46 编辑
巢易白 发表于 2018-7-2 15:30
这是先加载到SRAM了

是的,加载后,在显示JPEG前,把数据发送到显存(LCD的映射),再调用GUI_MEMDEV_WriteAt函数一次性显示,这是我的理解

回复 支持 反对

使用道具 举报

发表于 2018-7-2 16:28:43 | 显示全部楼层
不忘初_Wc6CC 发表于 2018-7-2 15:43
是的,加载后,在显示JPEG前,把数据发送到显存(LCD的映射),再调用GUI_MEMDEV_WriteAt函数一次性显示 ...

这已经是最快的方案了,毕竟emwin后面怎么处理我们没法控制
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 08:24:54 | 显示全部楼层
巢易白 发表于 2018-7-2 16:28
这已经是最快的方案了,毕竟emwin后面怎么处理我们没法控制

比不是这样的,LCD有个映射的显存,把数据放入显存但不显示在屏幕上,在该显示的地方,调用某条语句一次就全显了;
回复 支持 反对

使用道具 举报

发表于 2018-7-3 08:48:10 | 显示全部楼层
不忘初_Wc6CC 发表于 2018-7-3 08:24
比不是这样的,LCD有个映射的显存,把数据放入显存但不显示在屏幕上,在该显示的地方,调用某条语句一次 ...

429显示液晶的驱动本身就是向显存写入内容呀,
我也不清楚了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 08:55:48 | 显示全部楼层
巢易白 发表于 2018-7-3 08:48
429显示液晶的驱动本身就是向显存写入内容呀,
我也不清楚了

目的是不要边写入显存边显示,这样绘制过程会让人觉得慢,要先完后显示,就好在写显存时屏蔽了断开了显存和LCD的连接,待全部数据写入完,在接通LCD,这样一次就显示了,但试了很多方案都不行啊
回复 支持 反对

使用道具 举报

发表于 2018-7-23 15:22:40 | 显示全部楼层
推荐BMP  比较快
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-17 14:16 , Processed in 0.034648 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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