我目前正在尝试在通用图像解码/编码库中实现 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 是否未设计为与回调一起使用。
最佳答案
好吧,我浏览了 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 句柄作为第一个参数,将缓冲区作为第二个参数,将要写入的字节数作为第三个参数。返回值是写入的字节数。
关于c - giflib I/O 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22150778/