结构

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_vtableGdkPixbufModuleFillVtableFunc 函数,该函数将在加载模块时被调用,并且必须设置 GdkPixbufModule 的函数指针。

为了在实际加载模块(可能需要调用 dlopen 来加载图像库)之前进行格式检查,模块通过 fill_info 函数导出其签名(和其他信息)。外部实用程序 gdk-pixbuf-query-loaders 使用它来创建包含所有可用加载程序及其签名的文本文件。然后,GdkPixbuf 在运行时读取该文件,以获取可用加载程序及其签名的列表。

模块只能实现通过 GdkPixbufModule 提供的部分功能。如果未实现特定功能,则 fill_vtable 函数将不会设置 GdkPixbufModule 结构的相应函数指针。如果模块支持增量加载(即提供 begin_loadstop_loadload_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

无可用描述。