0

我已阅读 giflib 使用说明并编写了以下代码:

GifFileType *gifFile = DGifOpenFileName("D:\\my.gif00.gif");
DGifSlurp(gifFile);
int h = gifFile->SHeight;
int w = gifFile->SWidth;
int count = gifFile->ImageCount;
GifPixelType *myPixels = new GifPixelType[w]; 

int errcode = DGifGetLine(gifFile, myPixels, 1);
if (errcode == GIF_OK) {
} else {
    PrintGifError();
}

如您所见,我在 DGifOpenFileName 函数中作为参数设置的任何文件都会导致错误,PrintGifError() 会打印出以下消息:

GIF-LIB 错误:#Pixels 大于宽度 * 高度。

我不明白我的代码有什么问题。我想要的是读取 gif 文件的像素,编辑它们然后设置回 gif 文件。你能帮忙解决这个问题吗?

4

1 回答 1

5

据我所知,这似乎表明您的 gif 文件已损坏。

问题是你不应该使用DGifGetLine(). 该函数DGifSlurp()将整个 GIF 文件读入 gifFile 结构。在内部,它调用DGifGetLine()(以及其他一些东西),并且在它返回时,整个文件已经被处理。在那之后尝试打电话DGifGetLine()是没有意义的。

这就是 dgif_lib.c 所说的DGifSlurp()

/******************************************************************************
 This routine reads an entire GIF into core, hanging all its state info off
 the GifFileType pointer.  Call DGifOpenFileName() or DGifOpenFileHandle()
 first to initialize I/O.  Its inverse is EGifSpew().
*******************************************************************************/
于 2013-05-09T17:12:39.737 回答