我目前正在尝试在通用图像解码/编码库中实现 gif 支持。在那里,我们为 fwrite 和 fread 定义了回调函数,以使其更加通用。
对于 gif 实现,我尝试使用 giflib。现在我想知道是否有可能设置自定义 I/O 回调。
DGifOpen ( void *userPointer, InputFunc *func)
Run Code Online (Sandbox Code Playgroud)
正在将输入处理函数作为参数,但我无法从文档中找出该功能。它只是指源头,它只说:
/* func type to read gif data from arbitrary sources (TVT) */
typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个函数是否用于自定义文件读取(以及如果、如何),或者 giflib 是否未设计为与回调一起使用。
好吧,我浏览了 giflib 的源代码,并意识到回调应该替换 fread。
typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
Run Code Online (Sandbox Code Playgroud)
第一个参数是 gif 句柄,第二个参数是目标缓冲区,第三个参数是应读取的数据长度。返回值相当于 fread,是读取的字节数。注册回调时,可以在 userPointer 中传递附加数据:
DGifOpen ( void *userPointer, InputFunc *func)
Run Code Online (Sandbox Code Playgroud)
userPointer 可以作为 gif 句柄的成员进行访问 (pGifHandle->userData)
同样,您可以使用写入回调。
注册您的函数和指向自定义数据的指针
EGifOpen ( void *userPointer, OutputFunc *func)
Run Code Online (Sandbox Code Playgroud)
其中 OutputFunc 将 gif 句柄作为第一个参数,将缓冲区作为第二个参数,将要写入的字节数作为第三个参数。返回值是写入的字节数。
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |