结构
GdkPixbufPixbufModule
描述 [src]
struct GdkPixbufModule {
char* module_name;
char* module_path;
GModule* module;
GdkPixbufFormat* info;
GdkPixbufModuleLoadFunc load;
GdkPixbufModuleLoadXpmDataFunc load_xpm_data;
GdkPixbufModuleBeginLoadFunc begin_load;
GdkPixbufModuleStopLoadFunc stop_load;
GdkPixbufModuleIncrementLoadFunc load_increment;
GdkPixbufModuleLoadAnimationFunc load_animation;
GdkPixbufModuleSaveFunc save;
GdkPixbufModuleSaveCallbackFunc save_to_callback;
GdkPixbufModuleSaveOptionSupportedFunc is_save_option_supported;
void (* _reserved1) (
void
);;
void (* _reserved2) (
void
);;
void (* _reserved3) (
void
);;
void (* _reserved4) (
void
);;
}
GdkPixbufModule 包含在特定文件格式中加载和保存图像所需的必要函数。
如果 GdkPixbuf 已使用 GModule 支持进行了编译,则可以通过可以加载(或许还可以保存)图像和动画新格式的模块来对其进行扩展。
实现模块
实现模块所需的 GdkPixbuf 接口包含在 gdk-pixbuf-io.h 中(如果模块支持动画,则还包括在 gdk-pixbuf-animation.h 中)。它们不受与常规 GdkPixbuf API 相同的稳定性保证的约束。为突出这一事实,它们受 GDK_PIXBUF_ENABLE_BACKEND 预处理器符号的保护。
每个可加载模块都必须包含一个名为 fill_vtable 的 GdkPixbufModuleFillVtableFunc 函数,该函数将在加载模块时被调用,并且必须设置 GdkPixbufModule 的函数指针。
为了在实际加载模块(可能需要调用 dlopen 来加载图像库)之前进行格式检查,模块通过 fill_info 函数导出其签名(和其他信息)。外部实用程序 gdk-pixbuf-query-loaders 使用它来创建包含所有可用加载程序及其签名的文本文件。然后,GdkPixbuf 在运行时读取该文件,以获取可用加载程序及其签名的列表。
模块只能实现通过 GdkPixbufModule 提供的部分功能。如果未实现特定功能,则 fill_vtable 函数将不会设置 GdkPixbufModule 结构的相应函数指针。如果模块支持增量加载(即提供 begin_load、stop_load 和 load_increment),则它不必实现 load,因为 GdkPixbuf 可以提供包装增量加载的通用 load 实现。
安装模块
安装模块是一个两步过程
- 将模块文件复制到加载程序目录(通常是
$libdir/gdk-pixbuf-2.0/$version/loaders,除非被环境变量GDK_PIXBUF_MODULEDIR覆盖) - 调用
gdk-pixbuf-query-loaders来更新模块文件(通常是$libdir/gdk-pixbuf-2.0/$version/loaders.cache,除非被环境变量GDK_PIXBUF_MODULE_FILE覆盖)。
结构成员
module_name模块的名称,通常与此类型图像的常用文件扩展名相同,例如“xpm”、“jpeg”或“png”。
module_path加载模块所依据的路径。
module已加载的
GModule。info保存有关模块信息的
GdkPixbufFormat。load从文件加载图像。
load_xpm_data从内存中的数据加载图像。
begin_load开始增量加载。
stop_load停止增量加载。
load_increment继续增量加载。
load_animation从文件加载动画。
save将
GdkPixbuf保存到文件。save_to_callback通过调用给定的
GdkPixbufSaveFunc来保存GdkPixbuf。is_save_option_supported返回模块是否支持保存选项键。
_reserved1无可用描述。
_reserved2无可用描述。
_reserved3无可用描述。
_reserved4无可用描述。