gif - 如何使用 gif_lib 将 RGB 编码为 gif
问题描述
如果我像这样运行 RGB2GIF:
RGB2GIF(true, 1, "../tests/porsche.rgb", ExpNumOfColors, 320, 200);
输出就像原始图像
但是当我使用另一个 rgb 文件时:
RGB2GIF(true, 1, "D:\\rgb.yuv", ExpNumOfColors, 1280, 720);`
out gif 文件缺少颜色。
它与全局颜色图有关吗?本地色图?
static void SaveGif(GifByteType *OutputBuffer, int Width, int Height, int ExpColorMapSize, ColorMapObject *OutputColorMap){int i, Error;
GifFileType *GifFile;
GifByteType *Ptr = OutputBuffer;
/* Open stdout for the output file: */
gfile = fopen("D:\\out_my.gif", "wb+");
if ((GifFile = EGifOpen(gfile, writeGifData, &Error)) == NULL) {
PrintGifError(Error);
exit(EXIT_FAILURE);
}
if (EGifPutScreenDesc(GifFile,
Width, Height, ExpColorMapSize, 0,
OutputColorMap) == GIF_ERROR ||
EGifPutImageDesc(GifFile,
0, 0, Width, Height, false, OutputColorMap) ==
GIF_ERROR){
PrintGifError(Error);
printf("error\n");
exit(EXIT_FAILURE);
}
GifQprintf("\n%s: Image 1 at (%d, %d) [%dx%d]: ",
PROGRAM_NAME, GifFile->Image.Left, GifFile->Image.Top,
GifFile->Image.Width, GifFile->Image.Height);
for (i = 0; i < Height; i++) {
if (EGifPutLine(GifFile, Ptr, Width) == GIF_ERROR)
exit(EXIT_FAILURE);
GifQprintf("\b\b\b\b%-4d", Height - i - 1);
Ptr += Width;
}
printf("\n");
printf("close file\n");
if (EGifCloseFile(GifFile, &Error) == GIF_ERROR)
PrintGifError(Error);
fclose(gfile);
exit(EXIT_FAILURE);
}
static void RGB2GIF(bool OneFileFlag, int NumFiles, char *FileName, int
ExpNumOfColors, int Width, int Height)
{
int ColorMapSize;
GifByteType *RedBuffer = NULL, *GreenBuffer = NULL, *BlueBuffer = NULL,
*OutputBuffer = NULL;
ColorMapObject *OutputColorMap = NULL;
ColorMapSize = 1 << ExpNumOfColors;
if (NumFiles == 1) {
LoadRGB(FileName, OneFileFlag,
&RedBuffer, &GreenBuffer, &BlueBuffer, Width, Height);
}
else {
LoadRGB(NULL, OneFileFlag,
&RedBuffer, &GreenBuffer, &BlueBuffer, Width, Height);
}
if ((OutputColorMap = GifMakeMapObject(ColorMapSize, NULL)) == NULL ||
(OutputBuffer = (GifByteType *)malloc(Width * Height *
sizeof(GifByteType))) == NULL)
GIF_EXIT("Failed to allocate memory required, aborted.");
printf("GifQuantizeBuffer\n");
if (GifQuantizeBuffer(Width, Height, &ColorMapSize,
RedBuffer, GreenBuffer, BlueBuffer,
OutputBuffer, OutputColorMap->Colors) == GIF_ERROR)
exit(EXIT_FAILURE);
free((char *)RedBuffer);
free((char *)GreenBuffer);
free((char *)BlueBuffer);
SaveGif(OutputBuffer, Width, Height, ExpNumOfColors, OutputColorMap);
}
解决方案
没有人使用这个 lib 编码 gif?除了 gif.h 之外,还有其他一些库可以对 gif 进行编码吗?
推荐阅读
- google-cloud-spanner - 在 Spanner 中加快对大型数据集的行扫描
- php - PHP Array Group 按相同的值和 SUM
- excel - WorksheetFunction.CountIf 用于多张工作表
- angular - TypeError:无法读取未定义 Ionic-v4 的属性“nativeElement”
- rest - 无法在 Springboot 中调试控制器
- c# - 如何在字典列表中引用以下字典中的值
- visual-studio - 重新加载 Web 项目时 Visual Studio 2019 值不在预期范围内
- c++ - 为一组 c++ 指针定义 operator<
- python - 如何从 matplotlib 中的 .dat 文件中读取多列,然后绘制到多个子图中
- thread-safety - 如何在调用的许多方法中停止线程?