c - giflib I/O 回调

标签 c callback gif

我目前正在尝试在通用图像解码/编码库中实现 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/

相关文章:

c - 将 LAPACKE_zgetrs 与 LAPACK_ROW_MAJOR 一起使用会导致非法内存访问

c - 释放 2D 动态分配的内存时出错

javascript - 为什么我的 Google Maps API 回调在前面的内联脚本之前执行?

ruby-on-rails - 覆盖gem中的模型,添加回调和方法

jquery - 停止加载 gif 动画,鼠标悬停时开始激活

bash - 如何在 FFMPEG 的同一命令中使用 -vf 和 -filter_complex

c - 重用现有的链表 API 实现

c - 如何获得 gtklistboxrow 的 child ?

javascript - 了解 JavaScript 的单线程特性

security - 图像清理库