首先找个一个GIF图,越萌越好,哈哈,这次需要用到的是一个叫Bin2C.exe的软件,打开一个GIF文件,点击Convent,点击一次即可,你可以到GIF图的目录找对应的.C文件,我的放在桌面,直接看到了,如图:
第一步已经完成了,接下来我贴出代码,先看代码:
#include
#include "DIALOG.h"
//#include "SWIPELIST.h"
unsigned char acPic[] = {数据太多,已删除}
GUI_GIF_INFO GifInfo;
GUI_GIF_IMAGE_INFO ImageInfo;
void MainTask(void) {
int i = 0;
GUI_Init();
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
GUI_GIF_GetInfo(acPic, sizeof(acPic), &GifInfo);
while (1) {
if (i < GifInfo.NumImages) {
GUI_GIF_GetImageInfo(acPic, sizeof(acPic), &ImageInfo, i);
GUI_GIF_DrawSub(acPic,
sizeof(acPic),
(LCD_GetXSize() - GifInfo.xSize) / 2,
(LCD_GetYSize() - GifInfo.ySize) / 2,
i++);
/* 设置每个GIF子图像的时间间隔。*/
GUI_Delay(ImageInfo.Delay * 15);
}
else
{
i = 0;
}
}
}
声明,代码中的一个acPic[]数组就是用Bin2C生成的数据,找一个软件打开这个Pic.文件,把数组复制过来。再看两个结构体,这个是在头文件已经包含的。不用理他。内容如下:
typedef struct {
int xPos;
int yPos;
int xSize;
int ySize;
int Delay;
} GUI_GIF_IMAGE_INFO;
typedef struct {
int xSize;
int ySize;
int NumImages;
} GUI_GIF_INFO;
简单的理解一下,第二个结构体是GIF图的信息,第一个结构体是组成GIF图所有子图的信息,可以理解为GIF图是由很多静态图组成的。
再看一下主函数主要调用的函数,我首先把背景色设置为白色。
来看第一个函数原型:int GUI_GIF_GetInfo(const void * pGIF, U32 NumBytes, GUI_GIF_INFO * pInfo);
参数 | 描述 |
pGIF | 指向 gif 文件所在的存储器区域的起始位置。 |
NumBytes | Gif 文件的字节数 |
pInfo | 指向该函数要填充的 GUI_GIF_INFO 结构 |
第二个函数原型:int GUI_GIF_GetImageInfo(const void * pGIF, U32 NumBytes,GUI_GIF_IMAGE_INFO * pInfo, int Index);
参数 | 描述 |
pGIF | 指向 gif 文件所在的存储器区域的起始位置。 |
NumBytes | Gif 文件的字节数 |
pInfo | 指向该函数要填充的 GUI_GIF_IMAGE_INFO 结构。 |
Index | 子图像基于 0 的索引。 |
第三个函数原型:int GUI_GIF_DrawSub(const void * pGIF, U32 NumBytes,int x0, int y0, int Index);
参数 | 描述 |
pGIF | 指向 gif 文件所在的存储器区域的起始位置 |
NumBytes | Gif 文件的字节数 |
x0 | 显示器中位图左上角的 X 位置。 |
y0 | 显示器中位图左上角的 Y 位置。 |
Index | 要显示的子图像基于 0 的索引。 |
下面截个程序某一刻运行的图,不知道怎么把GIF过程截下来:
所用到的代码可以到这个地址下载,下载地址:http://download.csdn.net/my
PS:刚开始我也不知道怎么实现的,我也不知道用什么工具来处理GIF图,我以为一个函数就实现了,我也谷歌必应了很多资料,所以大家要多试试,肯定会成功,也可以参考自带例程。
但是,过程中我遇到一个问题,刚开始我认为,生成的Pic.c文件,直接包含过来用,用一个extern unsigned char acPic[]; 或者#include"Pic.c"(这个在IAR我经常用到),但是用第一种方法能运行但不会显示,会提示“不完整的类型说明”,第二种方法直接报错。所以我就直接把生成的数组直接复制main函数之前用。
详细请参考此文章:点我!