GIF(Graphics Interchange Format)即图形交换格式, 是由CompuServe公司在1980年代开发的一种图像文件格式。它被设计用来在数据网络之间传输图像。 GIF标准支持交错、透明度、应用程序定义的数据,动画和原始文本的渲染。 GIF文件使用LZW (Lempel-Zif-Welch)文件压缩方法来压缩图像数据。GIF格式有两种版本, 一种版本只能存储一张图像,而另一种版本加入了对多帧图像的支持,这便是我们熟知的动图。
emWin在做GIF解压的时候需要大约16KB左右的RAM空间。在完成图像绘制后,用于解压的RAM空间会被释放。
33.1.1. GUI_GIF_DrawSub()
在当前窗口中的指定位置绘制gif文件的给定子图像,该文件已被加载到内存中。
代码清单:GIF-1 函数原型
int GUI_GIF_DrawSub(const void *pGIF, U32 NumBytes, int x0, int y0,
int Index);
-
pGIF: 指向gif文件所在的存储区的开始的指针;
-
NumBytes: gif文件的字节数;
-
x0: GIF左上角在屏幕上的x位置;
-
y0: GIF左上角在屏幕上的x位置;
-
Index: 要显示的子图像的索引,从0开始。
返回值:绘制成功返回0,绘制失败返回非0。
33.1.1.1. GUI_GIF_DrawSubEx()
在当前窗口的指定位置绘制gif文件的给定子图像,该文件不必加载到内存中。
代码清单:GIF-2 函数原型
int GUI_GIF_DrawSubEx(GUI_GET_DATA_FUNC *pfGetData, void *p, int x0,
int y0, int Index);
-
pfGetData: 指向用于获取数据的函数的指针;
-
p: 传递给pfGetData指向的函数的空指针;
-
x0: GIF左上角在屏幕上的x位置;
-
y0: GIF左上角在屏幕上的x位置;
-
Index: 要显示的子图像的索引,从0开始。
返回值:绘制成功返回0,绘制失败返回非0。
33.1.2. GUI_GIF_GetImageInfo()
返回已加载到内存中的GIF文件的给定子图像的信息。
代码清单:GIF-3 函数原型
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开始;
返回值:获取成功返回0,获取失败返回非0。
此函数主要用来获取GIF动图的一些基本信息,其中子图象的显示时长在播放动图的时候很有用,如果显示时长为0,则使用默认的10ms长度。
代码清单:GIF-4 GUI_GIF_IMAGE_INFO结构原型
typedef struct {
int xPos;
int yPos;
int xSize;
int ySize;
int Delay;
} GUI_GIF_IMAGE_INFO;
-
xPos: 最后绘制图像的X位置;
-
yPos: 最后绘制图像的Y位置;
-
xSize: 最后绘制图像的X大小;
-
ySize: 最后绘制图像的Y大小;
-
Delay: 每张子图象的显示时长,单位10ms。
33.1.2.1. GUI_GIF_GetInfo()
返回一个信息结构,其中包含关于已加载到内存中的给定GIF文件中的子图像的大小和数量的信息。
代码清单:GIF-5 函数原型
int GUI_GIF_GetInfo(const void *pGIF, U32 NumBytes, GUI_GIF_INFO
*pInfo);
-
pGIF: 指向gif文件所在的存储区的开始的指针;
-
NumBytes: gif文件的字节数;
-
pInfo: 指向GUI_GIF_INFO结构的指针,该结构由这个函数填充。
返回值:获取成功返回0,获取失败返回非0。
代码清单:GIF-6 GUI_GIF_INFO结构原型
typedef struct {
int xSize;
int ySize;
int NumImages;
} GUI_GIF_INFO;
-
xSize: 图像的X大小;
-
ySize: 图像的Y大小;
-
NumImages: 文件中子图像的数目。
33.2. GIF图片显示实验
接下来我们通过一个实验来讲解如何简单的显示GIF图片,更多API函数的演示实验可参考官方例程2DGL_DrawGIF.c,例程路径如下:
SeggerEval_WIN32_MSVC_MinGW_GUI_V548\Sample\Tutorial\2DGL_DrawGIF.c
33.2.1. 代码分析
33.2.1.1. 绘制外部存储器(SD卡&#