OpenEdv-开源电子网

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

怎么解决刷图片显示拉窗帘效果?

[复制链接]

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2012-1-10
在线时间
237 小时
发表于 2016-11-5 16:14:59 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 magicoctoy 于 2016-11-28 13:53 编辑

原子的实验43 图片显示实验,使用RGB刷图片到7寸屏时,前后2张图片显示“拉窗帘效果”,不是一次性显示整张图片。怎么优化?


刚解决,在下楼中!
建议大家STM32F429用RGB刷图片都可以用这种方法,显示效果极好!

最佳答案

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

怎么优化?去换个支持硬件图片解码的芯片吧,你所谓的拉窗帘是因为图片解码算法耗费了大量的时间!也就是说那是MCU的性能限制的。除非你把图片解码好了,已经是RGB数据了,剩下的就是将数据显示到屏幕上,这样就会快很多!省去了图片解码的过程
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2012-1-10
在线时间
237 小时
 楼主| 发表于 2016-11-28 13:45:46 | 显示全部楼层
本帖最后由 magicoctoy 于 2016-11-28 13:48 编辑

解决图片显示“拉窗帘”,立即刷新图片。参考了安富莱的开发板的STemWin显示BMP例子。
移植原子的STemWin显示BMP图片的例子程序。将LCDConf_FlexColor_Template.c注释掉,使用LCDConf_Lin_Template.c文件。
增加程序:
GUI_HMEM _ShowBMP2(u8 *BMPFileName,u32 x,u32 y)
{
        u16 bread;
        char *_acBuffer;
        char result;
        int XSize,YSize;   
    GUI_HMEM hMem;
    GUI_MEMDEV_Handle hMemBMP;
        
        result = f_open(&BMPFile,(const TCHAR*)BMPFileName,FA_READ);        //打开文件
        //文件打开错误或者文件大于BMPMEMORYSIZE
        if((result != FR_OK) || (BMPFile.obj.objsize>BMPMEMORYSIZE)){
        return 1;
    }
   
        /* 申请一块内存空间 并且将其清零 */
        hMem = GUI_ALLOC_AllocZero(BMPFile.obj.objsize);
        
        /* 将申请到内存的句柄转换成指针类型 */
        _acBuffer = GUI_ALLOC_h2p(hMem);
        
        /* 读取文件到动态内存 */
        result = f_read(&BMPFile,_acBuffer,BMPFile.obj.objsize,(UINT *)&bread); //读取数据
        
        if (result != FR_OK){
                return 3;
        }

    XSize = GUI_BMP_GetXSize(_acBuffer);//返回存储设备的X尺寸(宽度)
    YSize = GUI_BMP_GetYSize(_acBuffer);//返回存储设备的X尺寸(高度)   
    /* 创建内存设备,并将BMP图片绘制到此内存设备里面,此内存设备要在主程序中用到
       所以退出此函数前,不要释放。
    */
    hMemBMP = GUI_MEMDEV_CreateEx(0, 0, XSize, YSize, GUI_MEMDEV_HASTRANS);//创建具有额外创建标志的存储设备
    GUI_MEMDEV_Select(hMemBMP);                //选择作为绘制操作目标的储存设备
    GUI_BMP_Draw(_acBuffer, 0, 0);        //绘制已加载到存储器的BMP文件
    GUI_MEMDEV_Select(0);                        //选择作为绘制操作目标的储存设备

        /* 释放动态内存hMem */
        GUI_ALLOC_Free(hMem);        
        
        f_close(&BMPFile);                                //关闭BMPFile文件

        return hMemBMP;;
}
在主程序中调用:
                hMemBMP = _ShowBMP2("0:/PICTURE/0.bmp", 0, 0);         
                /* 用到BMP图片的时候,调用此函数即可 */
                GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);        //将存储设备的内容写入存储设备的给定位置        
                GUI_MEMDEV_Delete(hMemBMP);                        //释放存储设备使用的内存
                GUI_Delay(3000);        

回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-11-5 16:15:00 | 显示全部楼层
怎么优化?去换个支持硬件图片解码的芯片吧,你所谓的拉窗帘是因为图片解码算法耗费了大量的时间!也就是说那是MCU的性能限制的。除非你把图片解码好了,已经是RGB数据了,剩下的就是将数据显示到屏幕上,这样就会快很多!省去了图片解码的过程
回复

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2012-1-10
在线时间
237 小时
 楼主| 发表于 2016-11-5 16:38:55 | 显示全部楼层
(⊙o⊙)哦,去尝试下将图片转成RGB数据文件,舍去图片解码,试试。
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-7 14:07:56 | 显示全部楼层
提高处理器性能。。。MCU不太适合做复杂的图形应用~
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2010-12-14
在线时间
5 小时
发表于 2016-11-29 00:13:16 | 显示全部楼层
嘿,还以为你想实现百页窗的效果呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 16:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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