[gif] 基于gif.h的gif文件生成
MFC的demo下载 其运行如下图:
gif.h是一个开源的gif库,整个库只有一个头文件,用于gif文件的生成。其使用非常简单,仅需调用三个函数。
以下是一个简单的demo(待写入的图片数据,是模拟的RGBA数据):
- #include "stdafx.h"
- #include "gif.h"
- #include <windows.h>
- #define WIDTH 200
- #define HEIGHT 150
- #define DELAY 50 // 单位是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
MFC的demo下载 其运行如下图:
gif.h是一个开源的gif库,整个库只有一个头文件,用于gif文件的生成。其使用非常简单,仅需调用三个函数。
以下是一个简单的demo(待写入的图片数据,是模拟的RGBA数据):
- #include "stdafx.h"
- #include "gif.h"
- #include <windows.h>
- #define WIDTH 200
- #define HEIGHT 150
- #define DELAY 50 // 单位是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