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

2019-07-20 18:31发布

本帖最后由 magicoctoy 于 2016-11-28 13:53 编辑

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


刚解决,在下楼中!
建议大家STM32F429用RGB刷图片都可以用这种方法,显示效果极好!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
magicoctoy
1楼-- · 2019-07-20 23:11
本帖最后由 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);        

taizonglai
2楼-- · 2019-07-21 02:40
 精彩回答 2  元偷偷看……
magicoctoy
3楼-- · 2019-07-21 05:13
(⊙o⊙)哦,去尝试下将图片转成RGB数据文件,舍去图片解码,试试。
小陀螺爱炒蛋
4楼-- · 2019-07-21 05:41
提高处理器性能。。。MCU不太适合做复杂的图形应用~
lylrabbit
5楼-- · 2019-07-21 10:17
 精彩回答 2  元偷偷看……

一周热门 更多>