giflib I / O回调

时间:2014-03-03 15:32:47

标签: c callback gif

我目前正在尝试在一般图像de / en编码库中实现gif支持。我们为fwrite和fread定义了回调函数,使其更通用。

对于gif实现,我尝试使用giflib。现在我想知道,如果有可能,设置自定义I / O回调。

DGifOpen ( void *userPointer, InputFunc *func) 

将输入处理函数作为参数,但我无法从文档中找出功能。它只是引用了源头,它只是说:

/* func type to read gif data from arbitrary sources (TVT) */
typedef int (*InputFunc) (GifFileType *, GifByteType *, int);

我的问题是,如果此函数用于自定义文件读取(以及如果,如何),或者giflib不适用于回调。

1 个答案:

答案 0 :(得分:4)

好的,我浏览了giflib的源代码,并意识到回调应该取代fread。

typedef int (*InputFunc) (GifFileType *, GifByteType *, int);

第一个参数是gif句柄,第二个参数是目标缓冲区,第三个参数是应该读取的数据长度。返回值等于fread,读取的字节数。 注册回调时,可以在userPointer中传递其他数据:

DGifOpen ( void *userPointer, InputFunc *func) 

userPointer可以作为gif句柄的成员访问(pGifHandle-> userData)

同样,您可以使用写回调。

中注册您的功能和指向自定义数据的指针
EGifOpen ( void *userPointer, OutputFunc *func)

其中OutputFunc将gif句柄作为第一个参数,缓冲区作为第二个参数,以及写入第三个的字节数。返回值是写入的字节数。