硬汉嵌入式论坛

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

[emWin教程入门篇] 第十四期:2-D图形库之绘制流位图

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2013-10-14 11:46:06 | 显示全部楼层 |阅读模式
特别说明: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
      本期主要2-D图形库的绘制流位图,与C文件格式的位图相反,流位图可放在任何位置。位图流可
用于创建位图。这些位图可按与C文件格式位图相同的方式使用。此外,emWin支持直接绘制基于调
色板的位图流,而不必在可寻址区域(RAM或ROM)放置完整的图像。
       0.PNG

本期分为三个小节:
14. 1  生成C流文件
14. 2  移植到armfly-v5开发板上面

14. 3  实验总结




14. 1  生成C流文件
C流文件由与C文件相同的信息组成。它与C文件相反,数据流可位于任何地方,无需编译或与项目
链接。C文件支持的所有输出格式对C流文件也可用。emWin支持从数据流创建位图并直接绘制数据流。
        这里顺便说一下压缩位图,这个可看可不看,位图转换器和emWin支持在生成的源代码文件中对位
图进行游程编码(RLE)压缩。如果位图包含许多水平序列的等着色像素,则RLE压缩方法最有效。高效压
缩的位图将节省大量的空间。但是,不建议对摄影图像进行压缩,因为它们通常不具有相同像素的序列。
也应注意,压缩图像的显示时间会稍微更长。如果要保存使用RLE压缩的位图,可在另存为C文件时,选
择一种压缩输出格式:“带调色板的C,压缩”或 “不带调色板的C,压缩”。显示压缩位图无需特殊功
能;与显示不压缩位图的方法相同。
        获得的压缩比将随所用位图的不同而不同。图像水平均匀性越好,压缩比越高。每个像素的位数越高,
产生压缩比也越高。
        下面我们以下面的图片为例子生成C流文件。
logo.PNG

第一步:打开BmpCvt.exe,并载入图片
1.png

第二步:做一下格式转换
2.png

第三步:另存为C流文件即可,不过另存的时候要注意
3.png

还有一些其它的格式,大家可以尝试一下,这里我只选择第一个作为实验。
4.png

然后得到如下的文件,将其放到SD卡根目录下下面就好了。
5.png

14. 2  移植到armfly-v5开发板上面
当前支持的格式如下:
6.png

GUI_CreateBitmapFromStream()这个函数支持任意格式的流位图创建,可以直接的创建
咱们上面生成的流位图,如果知道流位图的格式,那么可以直接的调用特定的函数,当前
支持的函数如下:
7.png

这个东西该怎么的理解呢,这里举一个例子,咱们上面生成的那个C流文件是转换成了565格式,这里
我们就可以使用函数GUI_CreateBitmapFromStream(),这个函数不管你转换成什么格式了,都可以
创建的,还有一个就是GUI_CreateBitmapFromStream565(), 这个就是特定格式的转换,正好用在咱
上面转换好的C流文件。
        现在如何实现刚才那个C流文件的显示呢,我这里用三种方法显示咱们刚才生成的C流文件。
第一步:通过申请动态内存将C流文件加载到外部SRAM, 这里我们用的是外部2MB的SRAM做的
              动态内存,方法如下:

        char *_acBuffer2;


       /* 申请一块内存空间 并且将其清零 */
       hMem = GUI_ALLOC_AllocZero(1024*512);
       /* 将申请到内存的句柄转换成指针类型 */
       _acBuffer2 = GUI_ALLOC_h2p(hMem);

      /* 打开文件 */        
      result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
      if (result != FR_OK)
      {
        return;
      }
      result = f_read(&file, _acBuffer2, file.fsize, &bw);
      if (result != FR_OK)
      {
        return;
      }
第二步:显示刚才加载到RAM中的数据。
方法一:直接调用函数 GUI_DrawStreamedBitmapAuto(_acBuffer2, 0, 0); 可以显示
方法二:GUI_CreateBitmapFromStream(&Bitmap, &ampalette, _acBuffer2);
              GUI_DrawBitmap(&Bitmap, 0, 0);
方法三:GUI_CreateBitmapFromStream565(&Bitmap, &ampalette, _acBuffer2);
              GUI_DrawBitmap(&Bitmap, 0, 0);
详细的大家看手册就可以的。
放到SD卡中的文件
logo.zip (4 KB, 下载次数: 222)

程序下载
第十四期.zip (15.78 MB, 下载次数: 693)

14. 3  实验总结
        流位图是个很好的东西,比如要在按钮上面显示图片,我们不需要将其用位图转换器转换成相应的C文件,并下载到
内部flash进行显示,我们可以将其放到外部SD,flash等存储器进行加载显示,这个实验尝试了一下在按钮上面显示,就是
显示不出来,后面有时间再做尝试。
//    BUTTON_SetStreamedBitmap(hButton, BUTTON_CI_UNPRESSED, (const GUI_BITMAP_STREAM *)&Bitmap);
//    BUTTON_SetBitmap(hButton, BUTTON_BI_UNPRESSED, &Bitmap);   
//    BUTTON_SetStreamedBitmapEx(hButton, BUTTON_BI_UNPRESSED, (const GUI_BITMAP_STREAM *)&Bitmap,0,0);
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2013-10-14 11:51:51 | 显示全部楼层
沙发。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

15

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 11:52:05 | 显示全部楼层
[s:152]
回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2013-10-14 11:52:12 | 显示全部楼层
顶一下楼主
天天向上
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2013-10-14 11:52:47 | 显示全部楼层
楼主加油 [s:151] [s:151]
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 11:56:07 | 显示全部楼层
顶一下楼主[s:151]
回复

使用道具 举报

9

主题

59

回帖

86

积分

初级会员

积分
86
发表于 2013-10-14 11:57:04 | 显示全部楼层
膜拜一下。。。
回复

使用道具 举报

11

主题

34

回帖

67

积分

初级会员

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

使用道具 举报

2

主题

35

回帖

2

积分

新手上路

积分
2
发表于 2013-10-14 12:24:56 | 显示全部楼层
学习了,谢谢了
回复

使用道具 举报

3

主题

48

回帖

3

积分

初级会员

积分
3
发表于 2013-10-14 12:37:08 | 显示全部楼层
好,学习一下。
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 13:24:13 | 显示全部楼层
看看是什么东东
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 13:49:03 | 显示全部楼层
回复

使用道具 举报

41

主题

97

回帖

220

积分

高级会员

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

使用道具 举报

0

主题

13

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 16:07:07 | 显示全部楼层
顶一下
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
发表于 2013-10-14 16:52:47 | 显示全部楼层
学习学习。。。。。。。。
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2013-10-14 21:34:33 | 显示全部楼层
[s:151]  [s:152]  [s:152]  [s:150]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

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

使用道具 举报

2

主题

135

回帖

2

积分

初级会员

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

使用道具 举报

0

主题

10

回帖

0

积分

新手上路

积分
0
发表于 2013-10-15 11:01:42 | 显示全部楼层
继续看,哈哈
回复

使用道具 举报

0

主题

8

回帖

0

积分

新手上路

积分
0
发表于 2013-10-15 11:14:23 | 显示全部楼层
这个系列真不错,LZ加油
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2013-10-16 01:43:41 | 显示全部楼层
刻苦学习
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
 楼主| 发表于 2013-10-16 01:52:41 | 显示全部楼层

回 cddxdm 的帖子

cddxdm:刻苦学习 (2013-10-16 01:43) 
兄弟,劳逸结合
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2013-10-16 09:03:16 | 显示全部楼层
看看。。。。。。。
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2013-10-17 08:21:16 | 显示全部楼层
[s:151][s:151][s:151][s:151][s:151]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
QQ
发表于 2013-10-17 08:58:48 | 显示全部楼层
还没有用过这种方法绘图,学习一下
回复

使用道具 举报

79

主题

191

回帖

428

积分

高级会员

积分
428
发表于 2013-10-17 13:58:55 | 显示全部楼层
[s:140][s:140]
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2013-10-17 16:32:44 | 显示全部楼层
继续学习
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2013-10-18 09:01:34 | 显示全部楼层
学习,收录下
回复

使用道具 举报

5

主题

34

回帖

5

积分

新手上路

积分
5
发表于 2013-10-21 16:54:18 | 显示全部楼层
恩····
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2013-10-21 17:25:51 | 显示全部楼层
[s:151] 学习一下啊
回复

使用道具 举报

2

主题

34

回帖

40

积分

新手上路

积分
40
发表于 2013-10-21 20:56:05 | 显示全部楼层
很好,支持一下楼主,顶起![s:151]
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2013-10-22 09:22:58 | 显示全部楼层
精品
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

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

使用道具 举报

1

主题

25

回帖

1

积分

新手上路

积分
1
发表于 2013-10-27 10:35:28 | 显示全部楼层
学习
回复

使用道具 举报

1

主题

25

回帖

1

积分

新手上路

积分
1
发表于 2013-10-27 11:45:45 | 显示全部楼层
请问这个用Image2LCD软件取出来的数组可以用吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
 楼主| 发表于 2013-10-27 11:49:17 | 显示全部楼层

回 zhuhao 的帖子

zhuhao:请问这个用Image2LCD软件取出来的数组可以用吗? (2013-10-27 11:45) 
不行的,他们有自己转移的软件
回复

使用道具 举报

1

主题

25

回帖

1

积分

新手上路

积分
1
发表于 2013-10-27 12:54:29 | 显示全部楼层

回 eric2013 的帖子

eric2013:不行的,他们有自己转移的软件 (2013-10-27 11:49)
我用他们自己的软件取模不能显示
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
 楼主| 发表于 2013-10-27 12:58:49 | 显示全部楼层

回 zhuhao 的帖子

zhuhao:我用他们自己的软件取模不能显示 (2013-10-27 12:54) 
应该是内存不够造成的,这个比较耗内存
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

积分
0
发表于 2013-10-28 10:43:42 | 显示全部楼层
谢谢 ,看看谢谢 ,看看
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

lcptw

积分
0
发表于 2013-10-28 10:51:15 | 显示全部楼层
upup[s:141] [s:141]
lcptw
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 22:36 , Processed in 0.516913 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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