硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3095|回复: 32
收起左侧

[emWin] STM32H7已经支持硬件JPEG,研究如何将其添加到emWn底层并优化,MDK安装目录已经增加硬件驱动支持文件

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107262
QQ
发表于 2018-5-7 02:55:54 | 显示全部楼层 |阅读模式
MDK安装目录已经增加硬件驱动支持,安装当前最新的MDK中间件软件包即可,当前是V7.7.0版本
路径:D:\Keil_v525\ARM\PACK\Keil\MDK-Middleware\7.7.0\emWin\Sample
QQ截图20180623171718.png



1.png
2.png
回复

使用道具 举报

9

主题

76

回帖

103

积分

初级会员

积分
103
发表于 2018-5-7 09:00:03 | 显示全部楼层
是JPEG,还是JPEG2000?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-7 10:10:35 | 显示全部楼层
我做了一个F7的,用的官方例程和原子哥的例程,MCU屏,800*480大概85ms

不知道还能优化吗,硬汉哥给看下?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-7 10:15:48 | 显示全部楼层
工程上不来

AppPictureShow.7z

3.14 KB, 下载次数: 91

JPEG.7z

19.58 KB, 下载次数: 84

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107262
QQ
 楼主| 发表于 2018-5-7 10:38:41 | 显示全部楼层

我们不搞F7,建议上STMCU.ORG,咨询ST的FAE

http://www.stmcu.org/module/forum/forum-1317-1.html

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107262
QQ
 楼主| 发表于 2018-5-7 10:41:53 | 显示全部楼层
ruixiang 发表于 2018-5-7 09:00
是JPEG,还是JPEG2000?

是JPEG
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-7 12:06:06 | 显示全部楼层
eric2013 发表于 2018-5-7 10:38
我们不搞F7,建议上STMCU.ORG,咨询ST的FAE。

http://www.stmcu.org/module/forum/forum-13 ...

好的我去问下,我这边做了硬件解码的STemwin,和缩放功能。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-5-7 15:52:31 | 显示全部楼层
本帖最后由 hpdell 于 2018-5-7 15:58 编辑
在水一方 发表于 2018-5-7 12:06
好的我去问下,我这边做了硬件解码的STemwin,和缩放功能。

牛逼呀,请问你的 硬件解码jpg与 emwin 已经整合了吗 ?


回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-5-7 21:27:11 | 显示全部楼层
硬汉  等你的H7核心板
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-10 09:42:53 | 显示全部楼层
hpdell 发表于 2018-5-7 15:52
牛逼呀,请问你的 硬件解码jpg与 emwin 已经整合了吗 ?

是的  你可以看一下,我用的原子的F7
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-5-10 09:59:09 | 显示全部楼层
在水一方 发表于 2018-5-10 09:42
是的  你可以看一下,我用的原子的F7

硬件jpg+emwin的速度如何啊 ?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-10 10:11:12 | 显示全部楼层
hpdell 发表于 2018-5-10 09:59
硬件jpg+emwin的速度如何啊 ?

用的MCU屏 800*480 解码速度40ms左右  显示35ms左右 其他事运算和SD读卡,总共85ms左右
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-10 10:11:43 | 显示全部楼层
hpdell 发表于 2018-5-10 09:59
硬件jpg+emwin的速度如何啊 ?

如果用RGB优化的好,会在显示速度上提升
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-5-10 14:06:07 | 显示全部楼层
在水一方 发表于 2018-5-10 10:11
如果用RGB优化的好,会在显示速度上提升

好,有空我试试看看,我的屏幕是rgb的
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-5-26 19:17:02 | 显示全部楼层


你好,我看了你的 硬件解码 jpg 文件

貌似不能够显示,

/*
*********************************************************************************************************
*    函 数 名: DisPlayjpeg
*    功能说明: 显示jpeg格式图片
*    形    参: JPEGFileName 文件名
              mode 0:指定位置显示     1:居中显示
              x         x起始坐标
              y            y起始坐标
              member 缩放分子
              denom  缩放分母
*    返 回 值: 无
*********************************************************************************************************
*/
int DisPlayjpeg(const TCHAR *JPEGFileName,u8 mode,u32 x,u32 y,int member,int denom)
{
    float Xflag,Yflag;
    FIL JPEGFile;
    __IO int xpos,ypos;        
   
    f_open(&JPEGFile, JPEGFileName, FA_READ);        
        

pic_buffer 这个内存申请 大小 为 1024*600*4


    my_picjpeg(&JPEGFile, (uint8_t *)pic_buffer);
   

    // 获取JPEG图片信息  这个地方可以获取到 jpg 的图片大小数据, 但是图片显示没有任何反应 ?????????????


    xpos= JPEG_Info.ImageWidth;    //获取JPEG图片的X轴大小
    ypos= JPEG_Info.ImageHeight;    //获取JPEG图片的Y轴大小


    switch(mode)
    {
    case 0:    //在指定位置显示图片
        if((member == 1) && (denom == 1)) //无需缩放,直接绘制
        {        
            GUI_JPEG_Draw(pic_buffer,JPEGFile.obj.objsize,x,y);    //在指定位置显示JPEG图片
        }
        else //否则图片需要缩放
        {
            GUI_JPEG_DrawScaled(pic_buffer,JPEGFile.obj.objsize,x,y,member,denom);
        }
        break;
    case 1:    //在LCD中间显示图片
        if(_picshowDev.width > JPEG_Info.ImageWidth)
            xpos = (_picshowDev.width - JPEG_Info.ImageWidth)/2 - 1;
        else
            xpos = 0;                                                        //大于从起点显示
   
        if(_picshowDev.height > JPEG_Info.ImageHeight)
            ypos = (_picshowDev.height - JPEG_Info.ImageHeight)/2 - 1;
        else
            ypos = 0;
        
        if((member == 1) && (denom == 1)) //无需缩放,直接绘制
        {
            //在LCD中间显示图片   
            GUI_JPEG_Draw(pic_buffer,JPEGFile.obj.objsize,xpos,ypos);
        }
        else //否则图片需要缩放
        {
            Xflag = (float)JPEG_Info.ImageWidth*((float)member/(float)denom);
            Yflag = (float)JPEG_Info.ImageHeight*((float)member/(float)denom);
            
            if(Xflag > _picshowDev.width)
                xpos = 0;
            else
                xpos  = (_picshowDev.width-(int)Xflag)/2+1;
            
            if(Yflag > _picshowDev.height)
                ypos = 0;
            else
                ypos  = (_picshowDev.height-(int)Yflag)/2+1;
            
            GUI_JPEG_DrawScaled(pic_buffer,JPEGFile.obj.objsize,xpos,ypos,member,denom);
        }
        break;
    }
   
    f_close(&JPEGFile);            //关闭JPEGFile文件

    return 0;
}


回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-27 09:02:28 | 显示全部楼层
hpdell 发表于 2018-5-26 19:17
你好,我看了你的 硬件解码 jpg 文件

貌似不能够显示,

你先别做emwin的  你先调试单图片显示
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-27 09:10:36 | 显示全部楼层
hpdell 发表于 2018-5-26 19:17
你好,我看了你的 硬件解码 jpg 文件

貌似不能够显示,

我用的是原子的板子,建议你先用最基本打打点和ST提供的例程吧图片解码显示出来。红色的区域是打点功能
无标题.png
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-5-27 09:13:41 | 显示全部楼层
hpdell 发表于 2018-5-26 19:17
你好,我看了你的 硬件解码 jpg 文件

貌似不能够显示,

这几个文件,是从官方的demo拷贝出来的。建议你先参考原子和官方例程。
无标题.png
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-6-23 16:38:09 | 显示全部楼层
现在 貌似 emwin v5.44 版本开始支持 stm32 的硬件解码 jpg 了,


JPEGConf.rar (11.78 KB, 下载次数: 40)




回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-6-23 16:38:51 | 显示全部楼层
在水一方 发表于 2018-5-27 09:13
这几个文件,是从官方的demo拷贝出来的。建议你先参考原子和官方例程。

现在 貌似 emwin v5.44 版本开始支持 stm32 的硬件解码 jpg 了,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107262
QQ
 楼主| 发表于 2018-6-23 17:07:28 | 显示全部楼层
hpdell 发表于 2018-6-23 16:38
现在 貌似 emwin v5.44 版本开始支持 stm32 的硬件解码 jpg 了,

这不就是MDK安装目录里面那个么,这代码搞的还挺麻烦。

Keil_v525\ARM\PACK\Keil\MDK-Middleware\7.7.0\emWin\Sample
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-6-23 17:47:43 | 显示全部楼层
本帖最后由 hpdell 于 2018-6-23 17:48 编辑
eric2013 发表于 2018-6-23 17:07
这不就是MDK安装目录里面那个么,这代码搞的还挺麻烦。

Keil_v525\ARM\PACK\Keil\MDK-Middleware\7.7. ...

貌似是的  ,目前里面有几个消息我目前还不会改,不然就可以试试看了
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-6-24 01:27:30 | 显示全部楼层
hpdell 发表于 2018-6-23 16:38
现在 貌似 emwin v5.44 版本开始支持 stm32 的硬件解码 jpg 了,

是的,到时候直接用这个,还是要研究一下他的解码机制,最近准备好好研究一下,上视频啊,之前只是移植的st官方代码,还没好好看!
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-6-24 12:12:28 | 显示全部楼层
在水一方 发表于 2018-6-24 01:27
是的,到时候直接用这个,还是要研究一下他的解码机制,最近准备好好研究一下,上视频啊,之前只是移植的 ...

强悍啦,到时看能否共享一下啊 ???
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-6-26 22:31:27 | 显示全部楼层
hpdell 发表于 2018-6-24 12:12
强悍啦,到时看能否共享一下啊 ???

最近没时间了,公司每天加班到现在周末也没休息,过段时间了!
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-6-27 09:49:48 | 显示全部楼层
在水一方 发表于 2018-6-26 22:31
最近没时间了,公司每天加班到现在周末也没休息,过段时间了!

好的,先多谢多谢了
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-8-15 16:45:24 | 显示全部楼层

你好,你的这个 硬件解码  jpg 图片,图片放大显示 你测试过没有啊,可否正常使用啊 ?

我目前貌似 图片缩小可以,正常显示也可以,但是图片放大不行 ?

是怎么回事啊 ?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-15 22:06:08 | 显示全部楼层
我试过是可以的,你看下  放大缩小的算法,其实就是 多打点 和 少打点
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-15 22:06:21 | 显示全部楼层
hpdell 发表于 2018-8-15 16:45
你好,你的这个 硬件解码  jpg 图片,图片放大显示 你测试过没有啊,可否正常使用啊 ?

我目前貌似 图 ...


我试过是可以的,你看下  放大缩小的算法,其实就是 多打点 和 少打点
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-8-15 23:57:29 | 显示全部楼层
在水一方 发表于 2018-8-15 22:06
我试过是可以的,你看下  放大缩小的算法,其实就是 多打点 和 少打点

你好,估计应该还是我的算法没有搞好,
#define  LCD_PIXEL_WIDTH   1024   //显示屏宽度
#define  LCD_PIXEL_HIGHT   600    //显示屏高度

我下面的这个函数是抄的你的修改如下
int GUI_JPEG_DrawScaledUser  (const void * pFileData, int DataSize, int x0, int y0, float Num, float Denom)
{
    u32 i,j,k;
    u16 *buf;
    u16 height,width;

    buf = (u16 *)pFileData;
   
    GUI_LOCK();
    width  = (float)JPEG_Info.ImageWidth*((float)Num/(float)Denom);
    height = (float)JPEG_Info.ImageHeight*((float)Num/(float)Denom);
   
    if(width > LCD_PIXEL_WIDTH)    //得到填充的宽度
        width = LCD_PIXEL_WIDTH;                     //图片宽度大于显示宽度 宽度等于显示宽度

    if(height > LCD_PIXEL_HIGHT)    //得到填充的高度
        height = LCD_PIXEL_HIGHT;                 //图片宽度大于显示高度 宽度等于显示高度

    for(i = 0; i < height; i++)
    {
        k = i*JPEG_Info.ImageWidth;
        for(j=0;j<width;j++)
        {
            LTCD_DrawPixel(  x0+j,  y0+i, buf[k+j]);      
        }        
    }
    GUI_UNLOCK();
    return 0;
}

放大缩小图片显示效果如下:
原始图片 一 :
原始图片-1.png

图片缩小 1/2:
图片缩小1%2.png   这个 貌似显示不全 ?

图片缩小 3/4:
图片缩小3%4.png   这个显示效果貌似也不是很理想啊 ?



// -----------------------------------------------------------------------

原始图片 二:

原始图片-2.png

图片放大 2倍效果:
图片放大2倍.png


麻烦你帮忙看看,缩小、放大 部分改如何修改啊 ???










回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-16 00:30:15 | 显示全部楼层
本帖最后由 在水一方 于 2018-8-16 00:32 编辑
hpdell 发表于 2018-8-15 23:57
你好,估计应该还是我的算法没有搞好,
#define  LCD_PIXEL_WIDTH   1024   //显示屏宽度
#define  LCD ...
width  = (float)JPEG_Info.ImageWidth*((float)Num/(float)Denom);  //放大后的宽度
        height = (float)JPEG_Info.ImageHeight*((float)Num/(float)Denom); //放大后的高度
       
        if(width > _picshowDev.width)                                        //得到填充的宽度
                width = _picshowDev.width;                                         //图片宽度大于显示宽度 宽度等于显示宽度

        if(height > _picshowDev.height)                                        //得到填充的高度
                height = _picshowDev.height;                                 //图片宽度大于显示高度 宽度等于显示高度

        for(i = 0; i < height; i++)
        {
                LCD_SetCursor(x0,y0 + i);           //设置光标位置                            这一块和你设置 坐标 是一个意思
                LCD_WriteRAM_Prepare();             //开始写入GRAM
                for(j=0;j<width;j++)
                {        
                        LCD->LCD_RAM = buf[i*Denom/Num*JPEG_Info.ImageWidth + j*Denom/Num];//写入数据    //这边 就是你的打点函数  你好好看一下算法                     
                }               
        }

你看一下
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-8-16 11:07:13 | 显示全部楼层
在水一方 发表于 2018-8-16 00:30
width  = (float)JPEG_Info.ImageWidth*((float)Num/(float)Denom);  //放大后的宽度
        height = (float)J ...

多谢多谢了啊,我好好的研究研究一下
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-8-17 10:00:03 | 显示全部楼层
在水一方 发表于 2018-8-16 00:30
width  = (float)JPEG_Info.ImageWidth*((float)Num/(float)Denom);  //放大后的宽度
        height = (float)J ...

你好,目前貌似图片缩小 1/x 貌似没有问题了,x表示任意值

但是放大图片后,显示出来的图片貌似清晰度比较低,
111111.png

放大显示函数如下:

        else  //放大功能, 基本成功,但是貌似显示比较 模糊
        {
                width  = (float)JPEG_Info.ImageWidth*((float)Num/(float)Denom);  //放大后的宽度
                height = (float)JPEG_Info.ImageHeight*((float)Num/(float)Denom); //放大后的高度       

                if(width > LCD_PIXEL_WIDTH)        //得到填充的宽度
                        width = LCD_PIXEL_WIDTH;                                         //图片宽度大于显示宽度 宽度等于显示宽度

                if(height > LCD_PIXEL_HIGHT)        //得到填充的高度
                        height = LCD_PIXEL_HIGHT;                                 //图片宽度大于显示高度 宽度等于显示高度

                for(i = 0; i < height; i++)
                {
                        h = (u32)(i * Denom / Num * JPEG_Info.ImageWidth);
                        for(j=0;j<width;j++)
                        {
                                w = (u32)(j * Denom / Num);
                               
                                // 每个实际像素点显示 2个坐标位置
                                LTCD_DrawPixel(  x0+j,  y0+i, buf[h + w] );
                                LTCD_DrawPixel(  x0+j+1,  y0+i+1, buf[h + w] );   //显示放大的点
                                j ++;
                        }
                        i ++;
                }
        }

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-23 13:05 , Processed in 0.312221 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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