[gif] 基于gif.h的gif文件生成

来源:互联网 发布:投稿软件 编辑:程序博客网 时间:2024/05/28 05:13

MFC的demo下载 其运行如下图:



gif.h是一个开源的gif库,整个库只有一个头文件,用于gif文件的生成。其使用非常简单,仅需调用三个函数。

以下是一个简单的demo(待写入的图片数据,是模拟的RGBA数据):

#include "stdafx.h"#include "gif.h"#include <windows.h>#define WIDTH200#define HEIGHT150#define DELAY50 // 单位是1/100秒钟 即100表示一秒#define OUT_FILE "e:\\test.gif"// 模拟RGBA数据void UpdateData(BYTE* data, int length){static int i = 0;memset(data, 0, length);for (int x = 0; x < length; x += 4){int mod = (i % 3);if (mod == 0){data[x] = 255;}else if (mod == 1){data[x + 1] = 255;}else{data[x + 2] = 255;}}++i;}int _tmain(int argc, _TCHAR* argv[]){  int length = WIDTH * HEIGHT * 4; // 4 :仅支持RGBA格式的图像数据 alpha通道会被忽略BYTE* data = new BYTE[length]; GifWriter writer;if (!GifBegin(&writer, OUT_FILE, WIDTH, HEIGHT, DELAY)){delete[] data;return 1;}for (int i = 0; i < 20; ++i){UpdateData(data, length);GifWriteFrame(&writer, data, WIDTH, HEIGHT, DELAY);}GifEnd(&writer);delete[] data;return 0;}

备注》

1、经查看gif.h的源码 其写文件使用的是FILE 如果是windows的开发平台,可将FILE改为内存映射,提升文件IO的速度

2、gif.h采用了局部调色板(每个文件均有独立的调色板) 而不是全局调色板 相对于全局调色板 局部调色板的gif图像质量更高 但是占用的内存更多

另外还有一个用于gif文件编解码的开源库:giflib  待后续研究了再发一个demo

1 0