硬汉嵌入式论坛

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

[emWin教程入门篇] 第八期:JPEG图片的显示方法(支持从外部Flash,SD等读取)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2013-9-22 20:22:25 | 显示全部楼层 |阅读模式
特别说明:pdf版60期emWin教程已经发布:
                  http://www.armbbs.cn/forum.php?mod=viewthread&tid=2932
                  armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:
                  http://www.armbbs.cn/forum.php?mod=viewthread&tid=1830
       一些打算学习emWin的初学者不用担心,现在前面这几期例子,不用理解为什么这么做,只需会调用相应的API函数
就可以了随着后面几期的进行,会逐渐讲这方面的东西,现在要做的就是熟练的使用这些API函数。
       本期主要讲emWin支持的JPEG图片的显示,官方支持的主要有两种显示方法,一种是从外部存储器读取数据到内部存
储器然后来显示图片,这种的显示速度要快些,另一种方法是直接从外部存储器读取数据并显示,这种办法的好处就是不要
大的RAM需求,每次读取一些数据显示一次,坏处就是显示速度比较的慢。
       由于官方提供的JPEG的显示方法比较耗RAM,这里将2MB的外部SRAM做为emWin的动态内存。
GUI_JPEG_Draw()      绘制已加载到存储器的JPEG文件
2.jpg

GUI_JPEG_DrawScaledEx  绘制没有加载到存储器的带比例的JPEG文件
下面是两张放到过程中的图片
1.PNG
0.PNG

本期分为三个小节:
8. 1  JPEG函数说明
8. 2 移植到armfly - v5开发板上面
8. 3  实验总结



7. 1  JPEG函数说明
     7.1.1  JPEG需要的内存大小
2.png

比如要显示800*480的jpeg大约需要 800*80 + 33k = 97k的内存,鉴于这种情况,这里把外部
的2MB的SRAM做为动态内存, 使用前记得初始化SRAM,然后就是在GUIconf.c文件里面初始化
一下。

/*
**********************************************************************
*
*       Defines
*
**********************************************************************
*/

/* Define the available number of bytes available for the GUI */
#define GUI_NUMBYTES  (1024*1024*2)
/* Define the average block size */
#define GUI_BLOCKSIZE 0x80

/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
**********************************************************************
*/
void GUI_X_Config(void)
{
#if 0
    /* 32 bit aligned memory area */
    static U32 aMemory[GUI_NUMBYTES / 4];

    /*  Assign memory to emWin */
    GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
#else   
    static U32 *aMemory;
    aMemory = (U32 *)EXT_SRAM_ADDR;
    /*  Assign memory to emWin */
    GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
#endif
}

    7.1.2    绘制已加载到存储器的JPEG文件     
这个函数的使用比较简单, 从SD卡中读出jpeg图片的数据以后,直接显示就可以了,但是有
时候比较大的图片需要从emWin的动态内存里面申请一块空间,使用完了放回去就可以了,方法
如下:
/* 申请一块内存空间 并且将其清零  这里申请512k的内存 */
hMem = GUI_ALLOC_AllocZero(1024*512);
/* 将申请到内存的句柄转换成指针类型 */
_acBuffer2 = GUI_ALLOC_h2p(hMem);
/* 释放申请的动态内存  */
GUI_ALLOC_Free(hMem);
此方法简单有效。

    7.1.3  GUI_JPEG_DrawScaledEx()   绘制无需加载到存储器的带比例的JPEG文件
     这个函数的使用方法和注意事项和上一节的BMP显示是基本一样的,这里就不多说了,这种加Ex的函数
主要用于存储器没有足够的RAM加载整个文件,可使用这种函数来加载图片文件。


7. 2  移植到armfly - v5开发板上面
    程序里面有一个地方注意一下就可以了,这里使用了条件编译将两种显示方法做了区分。

/*
    使用外部存储器分批读出
*/
#if 1
     _ShowJPGEx("1.jpg");                    
/*将图片数据全部的读到内存中,然后显示  */
#else
    _ShowJPG("2.jpg");
    while(1)
    {               
      GUI_Delay(100);        
    }
#endif
7. 3  实验总结
整体来说显示JPEG的速度还算可以,不过刷图片依然不是很给力。
SD卡中需要放的图片
SD卡根目录下.zip (95 KB, 下载次数: 369)

程序下载
第八期:STemWin5.20+uCOS-III+FatFS.zip (15.77 MB, 下载次数: 12634)
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2013-9-22 20:28:23 | 显示全部楼层
楼主太给力了,强烈支持
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2013-9-22 20:28:52 | 显示全部楼层
支持汉子哥,[s:151] [s:151]
天天向上
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-9-22 20:46:52 | 显示全部楼层
不知道VC6上面怎么模拟显示。
我学故我在
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
 楼主| 发表于 2013-9-22 20:51:24 | 显示全部楼层
uc-chao:
不知道VC6上面怎么模拟显示。
官方有例子的
2.png


1.png
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2013-9-23 08:55:11 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2013-9-23 09:56:51 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

0

主题

15

回帖

0

积分

新手上路

积分
0
发表于 2013-9-23 10:04:39 | 显示全部楼层
支持汉子哥
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
发表于 2013-9-23 10:20:33 | 显示全部楼层
学习学习。。。。。。。。。
回复

使用道具 举报

41

主题

97

回帖

220

积分

高级会员

积分
220
发表于 2013-9-23 11:18:18 | 显示全部楼层
good!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
 楼主| 发表于 2013-9-23 12:09:19 | 显示全部楼层
谢谢兄弟们的支持
回复

使用道具 举报

2

主题

19

回帖

25

积分

新手上路

积分
25
发表于 2013-9-23 14:25:12 | 显示全部楼层
学习学习
回复

使用道具 举报

2

主题

34

回帖

40

积分

新手上路

积分
40
发表于 2013-9-23 20:24:13 | 显示全部楼层
不错,支持一下!!!!
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

lcptw

积分
0
发表于 2013-9-24 11:14:45 | 显示全部楼层
支持,看看
lcptw
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2013-9-24 12:55:03 | 显示全部楼层
非常好
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2013-9-24 19:27:50 | 显示全部楼层
跟进,进一步学习实用技术。[s:151]
回复

使用道具 举报

0

主题

8

回帖

0

积分

新手上路

forever

积分
0
发表于 2013-9-24 22:13:27 | 显示全部楼层
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-26 11:25:28 | 显示全部楼层
支持硬汉……[s:152]
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2013-9-27 15:43:17 | 显示全部楼层
xuexi!!!!!!
回复

使用道具 举报

12

主题

46

回帖

82

积分

初级会员

积分
82
发表于 2013-9-28 23:30:10 | 显示全部楼层
不错呀,呵呵
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-9-29 12:18:20 | 显示全部楼层
跟进,进一步学习实用技术。
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2013-9-29 13:54:31 | 显示全部楼层
跟着楼主过来了!!!呵呵!
[s:151] [s:151]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
QQ
发表于 2013-9-30 14:18:41 | 显示全部楼层
不知道显示速度如何
回复

使用道具 举报

0

主题

16

回帖

0

积分

新手上路

积分
0
发表于 2013-10-2 12:09:25 | 显示全部楼层
[s:142]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
 楼主| 发表于 2013-10-4 11:39:17 | 显示全部楼层
顶一下
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2013-10-6 14:21:01 | 显示全部楼层
顶起,支持硬汉
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

29

回帖

0

积分

新手上路

加油

积分
0
发表于 2013-10-8 16:11:48 | 显示全部楼层
高端大气
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
发表于 2013-10-12 14:42:21 | 显示全部楼层
[s:151]
回复

使用道具 举报

2

主题

135

回帖

2

积分

初级会员

积分
2
发表于 2013-10-12 16:01:32 | 显示全部楼层
[s:151] [s:151] [s:151] [s:151]
回复

使用道具 举报

0

主题

3

回帖

0

积分

新手上路

积分
0
发表于 2013-10-12 23:20:29 | 显示全部楼层
楼主给力,新手正在学习
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 22:19:42 | 显示全部楼层
谢谢!
回复

使用道具 举报

79

主题

191

回帖

428

积分

高级会员

积分
428
发表于 2013-10-17 14:15:12 | 显示全部楼层
[s:151][s:151]
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2013-10-17 16:21:53 | 显示全部楼层
学习学习。。。。。。。。。
回复

使用道具 举报

11

主题

34

回帖

67

积分

初级会员

积分
67
发表于 2013-10-19 16:07:44 | 显示全部楼层
[s:152]  [s:152]  [s:152]
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2013-10-22 09:16:03 | 显示全部楼层
学习
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-22 21:58:27 | 显示全部楼层
不错不错
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2013-10-23 09:16:38 | 显示全部楼层
非常给力
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2013-10-23 09:21:03 | 显示全部楼层
硬汉哥,JPG和BMP这两种方法,哪种更具有优势呀?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
 楼主| 发表于 2013-10-23 12:27:14 | 显示全部楼层

回 chenzb_xm 的帖子

chenzb_xm:硬汉哥,JPG和BMP这两种方法,哪种更具有优势呀? (2013-10-23 09:21) 
视具体情况而定吧,方便的话,可以单独发个帖子,讨论一下
回复

使用道具 举报

1

主题

25

回帖

1

积分

新手上路

积分
1
发表于 2013-10-23 21:52:50 | 显示全部楼层
正在弄GUI读SD卡显示图片,学习一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 13:44 , Processed in 0.475222 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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