硬汉嵌入式论坛

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

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2013-9-18 15:03:43 | 显示全部楼层 |阅读模式
特别说明: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支持的BMP图片的显示,官方支持的主要有两种显示方法,一种是从外部存储器读取数据到内部存
储器然后来显示图片,这种的显示速度要快些,另一种方法是直接从外部存储器读取数据并显示,这种办法的好处就是不要
大的RAM需求,每次读取一些数据显示一次,坏处就是显示速度比较的慢。
       这里有一点必须的要说明一下,官方支持的这个BMP图片的显示速度没有咱们平时用的在TFT上面开窗然后填充图片数
据的速度快,但是有一个非常大的好处就是使用官方的这个函数才能充分的发挥背景重绘等机制。
GUI_BMP_DrawEx()      绘制已加载到存储器的BMP文件
10.PNG

GUI_BMP_Draw()           绘制已加载到存储器的BMP文件
2.PNG

GUI_BMP_DrawScaled()  绘制已加载到存储器的带比例的BMP文件
就是把上面的图片放大一下
11.PNG


本期分为三个小节:
7. 1  BMP函数说明
7. 2  将生成的字体移植到armfly - v5开发板上面
7. 3  实验总结



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

7.1.2  GUI_BMP_DrawEx()      绘制已加载到存储器的BMP文件。
     使用这个函数有两个地方需要特别的注意,一个就是如何获取外部存储器的数据并用于这个函数,
另一个就是用于图片数据缓存的大小。
     图片数据缓存的大小一定要大于定于图片显示横轴像素点的四倍,这一点非常的重要,搞错了图片

就显示不出来的,比如你的图片大小是800*480的,那么你的图片缓存的大小就至少得是800*4 = 3200字节。
    获取外部存储器数据的方法,这个方法是通用的。
  1. /*
  2. ********************************************************************************
  3. *
  4. *       _GetData
  5. *
  6. * Purpose:
  7. *   This routine is called by GUI_JPEG_DrawEx(). The routine is responsible
  8. *   for setting the data pointer to a valid data location with at least
  9. *   one valid byte.
  10. *
  11. * Parameters:
  12. *   p           - Pointer to application defined data.
  13. *   NumBytesReq - Number of bytes requested.
  14. *   ppData      - Pointer to data pointer. This pointer should be set to
  15. *                 a valid location.
  16. *   StartOfFile - If this flag is 1, the data pointer should be set to the
  17. *                 beginning of the data stream.
  18. *
  19. * Return value:
  20. *   Number of data bytes available.
  21. *********************************************************************************
  22. */
  23. static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off) {
  24.   static int FileAddress = 0;
  25.   UINT NumBytesRead;
  26.   FIL *PicFile;
  27.   PicFile = (FIL *)p;
  28.   /*
  29.   * Check buffer size
  30.   */
  31.   if (NumBytesReq > sizeof(_acBuffer)) {
  32.     NumBytesReq = sizeof(_acBuffer);
  33.   }
  34.   /*
  35.   * Set file pointer to the required position
  36.   */
  37.    if(Off == 1) FileAddress = 0;
  38.    else FileAddress = Off;
  39.    result =f_lseek(PicFile, FileAddress);
  40.   /*
  41.   * Read data into buffer
  42.   */
  43.   result = f_read(PicFile, _acBuffer, NumBytesReq, &NumBytesRead);
  44.   /*
  45.   * Set data pointer to the beginning of the buffer
  46.   */
  47.   *ppData = (const U8 *)_acBuffer;
  48.   /*
  49.   * Return number of available bytes
  50.   */
  51.   return NumBytesRead;
  52. }
复制代码
7. 2  将生成的字体移植到armfly - v5开发板上面
     移植很简单,这里就不和大家说了,详细看附件里面的程序。
7. 3  实验总结
整体来说F407刷图片的能力有限,当然刷一些小的图片还是松松的。
SD卡中需要放的图片
下载到根目录的图片.zip (259 KB, 下载次数: 589)

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

使用道具 举报

41

主题

97

回帖

220

积分

高级会员

积分
220
发表于 2013-9-18 15:08:34 | 显示全部楼层
正需要,太及时了!呵呵
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2013-9-18 15:12:46 | 显示全部楼层
顶起,谢谢LZ.............................
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2013-9-18 15:16:09 | 显示全部楼层
好东西,硬件出品,必属精品
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2013-9-18 15:32:32 | 显示全部楼层
非常感谢楼主,每期都很给力
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2013-9-18 15:33:09 | 显示全部楼层
为硬汉强势顶起
天天向上
回复

使用道具 举报

0

主题

8

回帖

0

积分

新手上路

积分
0
发表于 2013-9-18 15:33:41 | 显示全部楼层
正在学系统移植,可能用的上。看看,楼主辛苦...
回复

使用道具 举报

0

主题

4

回帖

0

积分

新手上路

积分
0
发表于 2013-9-18 15:50:20 | 显示全部楼层
高端大气上档次[s:151]
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2013-9-18 16:02:06 | 显示全部楼层
楼主很有心
回复

使用道具 举报

0

主题

10

回帖

0

积分

新手上路

积分
0
发表于 2013-9-18 16:33:32 | 显示全部楼层
[s:151]
回复

使用道具 举报

8

主题

25

回帖

49

积分

初级会员

积分
49
发表于 2013-9-18 17:52:53 | 显示全部楼层
......................
回复

使用道具 举报

3

主题

48

回帖

3

积分

初级会员

积分
3
发表于 2013-9-18 21:14:09 | 显示全部楼层
学习中。。。。
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
发表于 2013-9-18 22:28:03 | 显示全部楼层
学习学习 [s:150]
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-19 17:57:26 | 显示全部楼层
[s:151]
回复

使用道具 举报

0

主题

15

回帖

0

积分

新手上路

积分
0
发表于 2013-9-20 09:25:09 | 显示全部楼层
楼主强悍
回复

使用道具 举报

9

主题

59

回帖

86

积分

初级会员

积分
86
发表于 2013-9-20 10:19:28 | 显示全部楼层
学习一下,谢谢。。。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2013-9-22 11:15:41 | 显示全部楼层
[s:151]
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2013-9-22 13:55:03 | 显示全部楼层
学习中。。。
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2013-9-23 08:49:12 | 显示全部楼层
学习,整理下
回复

使用道具 举报

116

主题

799

回帖

1147

积分

至尊会员

积分
1147
QQ
发表于 2013-9-24 12:51:35 | 显示全部楼层
学习下
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2013-9-24 16:50:50 | 显示全部楼层
实用才是硬道理。[s:151]
回复

使用道具 举报

0

主题

8

回帖

0

积分

新手上路

forever

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

使用道具 举报

0

主题

12

回帖

0

积分

新手上路

积分
0
发表于 2013-9-27 15:37:38 | 显示全部楼层
顶一个ie
回复

使用道具 举报

12

主题

46

回帖

82

积分

初级会员

积分
82
发表于 2013-9-28 23:28:17 | 显示全部楼层
不错顶起来
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2013-9-29 13:49:48 | 显示全部楼层
[s:151]  [s:151]
[s:149] [s:149] 给力!!!多谢分享!!
回复

使用道具 举报

0

主题

10

回帖

0

积分

新手上路

积分
0
发表于 2013-9-29 16:10:30 | 显示全部楼层
继续
回复

使用道具 举报

2

主题

35

回帖

2

积分

新手上路

积分
2
发表于 2013-9-29 21:25:33 | 显示全部楼层
我打算把字库,图片,icon等之类的东西放到SPI flash中。然后在显示出来。
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

lcptw

积分
0
发表于 2013-9-30 13:48:03 | 显示全部楼层
正需要,太及时了!呵呵
lcptw
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2013-10-1 10:18:22 | 显示全部楼层
[s:151] 学习
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

23

主题

1404

回帖

1473

积分

至尊会员

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

使用道具 举报

0

主题

29

回帖

0

积分

新手上路

加油

积分
0
发表于 2013-10-8 16:07:01 | 显示全部楼层
嘻嘻,继续
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
发表于 2013-10-9 15:11:18 | 显示全部楼层
学习
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
QQ
发表于 2013-10-9 16:40:13 | 显示全部楼层
走走,瞧瞧,看看
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2013-10-10 23:08:55 | 显示全部楼层
[s:147] [s:147] [s:151] [s:151] [s:150] [s:150]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

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

使用道具 举报

5

主题

34

回帖

5

积分

新手上路

积分
5
发表于 2013-10-16 08:53:16 | 显示全部楼层
硬汉兄···
回复

使用道具 举报

11

主题

34

回帖

67

积分

初级会员

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

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2013-10-17 16:20:26 | 显示全部楼层
正需要,太及时了!呵呵
回复

使用道具 举报

0

主题

11

回帖

0

积分

新手上路

积分
0
发表于 2013-10-18 11:08:45 | 显示全部楼层
学习
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 01:38 , Processed in 0.353648 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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