GdkPixbufPixbuf

描述 [src]

final class GdkPixbuf.Pixbuf : GObject.Object
  implements Gio.Icon, Gio.LoadableIcon {
  /* No available fields */
}

像素缓冲区。

GdkPixbuf 包含有关图像的像素数据、色彩空间、每样本位数、宽度和高度以及行距(一行起始处与下一行起始处之间的字节数)的信息。

创建新的 GdkPixbuf

创建 Pixbuf 最基本的方式是用 GdkPixbuf 实例将现有的像素缓冲区封装起来。你可以使用 gdk_pixbuf_new_from_data() 函数执行此操作。

每次为某些数据创建新的 GdkPixbuf 实例时,你都需要指定一个销毁通知函数,该函数将在数据缓冲区需要释放时调用;这将在引用计数函数将某个 GdkPixbuf 设为 finalized 时发生。如果你有静态数据编译到你的应用程序中,你可以将 NULL 传入销毁通知函数,以便不会释放该数据。

可以将 gdk_pixbuf_new() 构造函数用作一种便利的方式,通过它可以创建具有空缓冲区的 Pixbuf;这相当于使用 malloc() 分配数据缓冲区,然后用 gdk_pixbuf_new_from_data() 将其封装起来。gdk_pixbuf_new() 函数将计算出最优的行距,以便可以使用一种高效的算法来执行渲染。

作为一个特例,你可以使用 gdk_pixbuf_new_from_xpm_data() 函数从内联 XPM 图像数据创建一个 Pixbuf。

你还可以使用 gdk_pixbuf_copy() 函数复制现有的 Pixbuf。这与仅仅获取旧 Pixbuf 实例的引用不同:复制函数实际上会复制内存中的像素数据,并为其创建一个新的 GdkPixbuf 实例。

引用计数

GdkPixbuf 结构是引用计数结构。这意味着应用程序可以在代码的多个部分中共享单个 Pixbuf。当程序的一部分需要使用 Pixbuf 时,应该通过调用 g_object_ref() 来获取它的引用;当不再需要 Pixbuf 时,它应该通过调用 g_object_unref() 来释放所获取的引用。与 GdkPixbuf 关联的资源将在其引用计数变为零时释放。新创建的 GdkPixbuf 实例的引用计数初始值为一。

图像数据

Pixbuf 中的图像数据以未压缩打包格式存储在内存中。其中的图像行从上到下存储,每行中的像素从左到右存储。

行末可能存在填充。

通过 gdk_pixbuf_get_rowstride() 返回的 Pixbuf 的“行距”值表明行之间的字节数。

提示: 如果使用 memcpy() 复制原始 pixbuf 数据,请注意 pixbuf 中的最后一行可能不会像完整的行步宽那么宽,而只像像素数据的需要宽度一样宽;也就是说:这样做是不安全的 memcpy (dest, pixels, rowstride * height) 来复制整个 pixbuf。改用 gdk_pixbuf_copy(),或计算最后一行字节的宽度,如下所示

last_row = width * ((n_channels * bits_per_sample + 7) / 8);

对于 GdkPixbuf 像素数组的每一行进行迭代时,也会应用相同的规则。

以下代码展示了具有 alpha 通道的 8 位每通道 RGB pixbuf 的简单 put_pixel() 函数。

static void
put_pixel (GdkPixbuf *pixbuf,
           int x,
       int y,
       guchar red,
       guchar green,
       guchar blue,
       guchar alpha)
{
  int n_channels = gdk_pixbuf_get_n_channels (pixbuf);

  // Ensure that the pixbuf is valid
  g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
  g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
  g_assert (gdk_pixbuf_get_has_alpha (pixbuf));
  g_assert (n_channels == 4);

  int width = gdk_pixbuf_get_width (pixbuf);
  int height = gdk_pixbuf_get_height (pixbuf);

  // Ensure that the coordinates are in a valid range
  g_assert (x >= 0 && x < width);
  g_assert (y >= 0 && y < height);

  int rowstride = gdk_pixbuf_get_rowstride (pixbuf);

  // The pixel buffer in the GdkPixbuf instance
  guchar *pixels = gdk_pixbuf_get_pixels (pixbuf);

  // The pixel we wish to modify
  guchar *p = pixels + y * rowstride + x * n_channels;
  p[0] = red;
  p[1] = green;
  p[2] = blue;
  p[3] = alpha;
}

加载图像

GdkPixBuf 类提供了一种简单的机制,用于同步和异步方式从文件中加载图像。

对于 GUI 应用程序,建议使用异步流 API 来避免阻塞应用程序的控制流。

此外,GdkPixbuf 提供 GdkPixbufLoader API 用于渐进图像加载。

保存图像

GdkPixbuf 类提供了多种文件格式的方法来保存图像数据。格式化数据可以写入文件或内存缓冲区。GdkPixbuf 还可以对数据调用用户定义的回调函数,该回调函数允许例如将图像写入套接字或将其存储在数据库中。

祖先

构造函数

gdk_pixbuf_new

创建一个新的 GdkPixbuf 结构并为其分配一个缓冲区。

gdk_pixbuf_new_from_bytes

从内存中只读的图像数据创建新的 GdkPixbuf

since: 2.32

gdk_pixbuf_new_from_data

从内存中图像数据创建新的 GdkPixbuf

gdk_pixbuf_new_from_file

通过从文件加载图像创建一个新 pixbuf。

gdk_pixbuf_new_from_file_at_scale

通过从文件加载图像创建一个新 pixbuf。

since: 2.6

gdk_pixbuf_new_from_file_at_size

通过从文件加载图像创建一个新 pixbuf。

since: 2.4

gdk_pixbuf_new_from_inline

从适合存储在程序内联数据中的平面表示创建一个 GdkPixbuf

已弃用: 2.32 

gdk_pixbuf_new_from_resource

通过从资源加载图像创建一个新的 pixbuf。

since: 2.26

gdk_pixbuf_new_from_resource_at_scale

通过从资源加载图像创建一个新的 pixbuf。

since: 2.26

gdk_pixbuf_new_from_stream

通过从输入流加载图像创建一个新 pixbuf。

since: 2.14

gdk_pixbuf_new_from_stream_at_scale

通过从输入流加载图像创建一个新 pixbuf。

since: 2.14

gdk_pixbuf_new_from_stream_finish

使用 gdk_pixbuf_new_from_stream_async() 开始的异步 pixbuf 创建操作完成。

since: 2.24

gdk_pixbuf_new_from_xpm_data

通过解析内存中的 XPM 数据创建一个新 pixbuf。

函数

gdk_pixbuf_calculate_rowstride

计算用这些值创建图像的 rowstride。

since: 2.36.8

gdk_pixbuf_get_file_info

解析图像文件足够远,以确定其格式和大小。

since: 2.4

gdk_pixbuf_get_file_info_async

异步解析图像文件足够远,以确定其格式和大小。

since: 2.32

gdk_pixbuf_get_file_info_finish

完成使用 gdk_pixbuf_get_file_info_async() 开始的异步 pixbuf 解析操作。

since: 2.32

gdk_pixbuf_get_formats

获取有关 GdkPixbuf 支持的图像格式的可用信息。

since: 2.2

gdk_pixbuf_init_modules

使用该目录中存在的loaders.cache文件初始化 gdk-pixbuf 加载器模块。

自 2.40 起

gdk_pixbuf_new_from_stream_async

通过异步加载输入流中的图像创建一个新 pixbuf。

since: 2.24

gdk_pixbuf_new_from_stream_at_scale_async

通过异步加载输入流中的图像创建一个新 pixbuf。

since: 2.24

gdk_pixbuf_save_to_stream_finish

完成使用 gdk_pixbuf_save_to_stream_async() 启动的异步 pixbuf 保存操作。

since: 2.24

实例方法

gdk_pixbuf_add_alpha

获取现有的 pixbuf 并为其添加一个 alpha 通道。

gdk_pixbuf_apply_embedded_orientation

获取现有的 pixbuf 并检查是否存在关联的“方向”选项。

自 2.12 起

gdk_pixbuf_composite

创建一个源图像 src 的转换,按照 scale_xscale_y 进行缩放,然后按照 offset_xoffset_y 进行平移。

gdk_pixbuf_composite_color

创建一个源图像 src 的转换,按照 scale_xscale_y 进行缩放,然后按照 offset_xoffset_y 进行平移,然后将结果图像的矩形 (dest_xdest_ydest_widthdest_height) 使用颜色 color1color2 的棋盘格进行 alpha 混合,并将其渲染到目标图像上。

gdk_pixbuf_composite_color_simple

创建一个新 pixbuf,按 dest_width x dest_height 缩放 src 并使用颜色 color1color2 的棋盘格对结果进行 alpha 混合。

gdk_pixbuf_copy

使用指定 pixbuf 的信息副本创建一个新 GdkPixbuf

gdk_pixbuf_copy_area

复制 src_pixbuf 中的一个矩形区域到 dest_pixbuf

gdk_pixbuf_copy_options

复制附加到一个 GdkPixbuf 的键值对选项到另一个 GdkPixbuf

自 2.36 起

gdk_pixbuf_fill

使用给定的 RGBA 值清除 pixbuf,并将 RGBA 值转换为 pixbuf 的像素格式。

gdk_pixbuf_flip

水平或垂直翻转 pixbuf,并在新 pixbuf 中返回结果。

since: 2.6

gdk_pixbuf_get_bits_per_sample

查询 pixbuf 中每个颜色样本的位数。

gdk_pixbuf_get_byte_length

以字节为单位返回像素数据长度。

since: 2.26

gdk_pixbuf_get_colorspace

查询 pixbuf 的颜色空间。

gdk_pixbuf_get_has_alpha

查询 pixbuf 是否具有 alpha 通道(不透明度信息)。

gdk_pixbuf_get_height

查询 pixbuf 的高度。

gdk_pixbuf_get_n_channels

查询 pixbuf 的通道数。

gdk_pixbuf_get_option

在选项列表中查找 key,这些选项可能已在加载 pixbuf 时附加到 pixbuf,或者可能已由使用 gdk_pixbuf_set_option() 的其他函数附加。

gdk_pixbuf_get_options

返回一个 GHashTable,其中列出了所有可能在加载 pixbuf 时附加到 pixbuf 的选项,或者可能已被使用 gdk_pixbuf_set_option() 的其他函数附加。

since: 2.32

gdk_pixbuf_get_pixels

查询 pixbuf 的像素数据的指针。

gdk_pixbuf_get_pixels_with_length

查询 pixbuf 的像素数据的指针。

since: 2.26

gdk_pixbuf_get_rowstride

查询 pixbuf 的行跨度,即一行开始与下一行开始之间的字节数。

gdk_pixbuf_get_width

查询 pixbuf 的宽度。

gdk_pixbuf_new_subpixbuf

创建一个新 pixbuf,表示 src_pixbuf 的一个子区域。

gdk_pixbuf_read_pixel_bytes

提供一个包含原始像素数据的 GBytes 缓冲区;数据不可修改。

since: 2.32

gdk_pixbuf_read_pixels

提供一个对原始像素数据的只读指针。

since: 2.32

gdk_pixbuf_ref

添加 pixbuf 的引用。

已过时:2.0 

gdk_pixbuf_remove_option

移除附加到 GdkPixbuf 的键值对选项。

自 2.36 起

gdk_pixbuf_rotate_simple

将一个pixbuf旋转90度倍数,在新的pixbuf中返回结果。

since: 2.6

gdk_pixbuf_saturate_and_pixelate

修改饱和度,并(可选)像素化src,将结果放入dest

gdk_pixbuf_save

以格式type将pixbuf保存至文件中。默认情况下,“jpeg”、“png”、“ico”和“bmp”是可保存的文件格式,但可能会安装更多的格式。可以通过以下方式确定所有可写格式的列表:。

gdk_pixbuf_save_to_buffer

以格式type将pixbuf保存到新缓冲区中,目前包括“jpeg”、“png”、“tiff”、“ico”或“bmp”。

since: 2.4

gdk_pixbuf_save_to_bufferv

gdk_pixbuf_save_to_buffer() 的 vector 版本。

since: 2.4

gdk_pixbuf_save_to_callback

以格式type将pixbuf保存为回调中产生的数据。

since: 2.4

gdk_pixbuf_save_to_callbackv

gdk_pixbuf_save_to_callback() 的 vector 版本。

since: 2.4

gdk_pixbuf_save_to_stream

pixbuf保存到输出流中。

since: 2.14

gdk_pixbuf_save_to_stream_async

异步将 pixbuf 保存到输出流中。

since: 2.24

gdk_pixbuf_save_to_streamv

pixbuf保存到输出流中。

自 2.36 起

gdk_pixbuf_save_to_streamv_async

异步将 pixbuf 保存到输出流中。

自 2.36 起

gdk_pixbuf_savev

gdk_pixbuf_save() 的 vector 版本。

gdk_pixbuf_scale

通过按 scale_xscale_y 进行缩放,然后按 offset_xoffset_y 进行平移,创建来自源图像 src 的转换,然后将结果图像的矩形 (dest_x, dest_y, dest_width, dest_height) 呈现在目标图像上,替换以前的内容。

gdk_pixbuf_scale_simple

创建一个新的 pixbuf,其中包含缩放到dest_width x dest_heightsrc 副本。

gdk_pixbuf_set_option

将键/值对作为选项附加到 GdkPixbuf 中。

since: 2.2

gdk_pixbuf_unref

从 pixbuf 中移除一个引用。

已过时:2.0 

GObject 继承的方法 (43)

请参阅 GObject 以获取方法的完整列表。

GIcon 继承的方法 (4)
g_icon_equal

检查两个图标是否相等。

g_icon_hash

获取图标的哈希值。

g_icon_serialize

GIcon 序列化到 GVariant 中。可以通过在返回的值上调用 g_icon_deserialize() 来获取同等的 GIcon。由于序列化尽可能避免使用原始图标数据,因此只有在同一台机器上(而不是通过网络)以及在相同的文件系统命名空间内,才能在进程之间传输 GVariant 的意义。

g_icon_to_string

生成 icon 的文本表示形式,可用于序列化,例如将 icon 传递给不同的进程或将其保存到持久性存储器中。使用 g_icon_new_for_string() 从返回的字符串中获取 icon

GLoadableIcon 继承的方法 (3)
g_loadable_icon_load

加载可加载图标。有关此函数的异步版本,请参见 g_loadable_icon_load_async()。

g_loadable_icon_load_async

异步加载图标。要完成此函数,请参见 g_loadable_icon_load_finish()。有关此函数的同步、阻塞版本,请参见 g_loadable_icon_load()。

g_loadable_icon_load_finish

完成在 g_loadable_icon_load_async() 中启动的异步图标加载。

属性

GdkPixbuf.Pixbuf:bits-per-sample

每个样本的位数。

GdkPixbuf.Pixbuf:colorspace

pixbuf 的色彩空间。

GdkPixbuf.Pixbuf:has-alpha

pixbuf 是否具有 alpha 通道。

GdkPixbuf.Pixbuf:height

pixbuf 的行数。

GdkPixbuf.Pixbuf:n-channels

每个像素的样本数。

GdkPixbuf.Pixbuf:pixel-bytes
无可用描述。

GdkPixbuf.Pixbuf:pixels

像素数据的指针 pixbuf。

GdkPixbuf.Pixbuf:rowstride

一行开始与下一行开始之间的字节数 。

GdkPixbuf.Pixbuf:width

列数 pixbuf。

信号

信号从 GObject (1) 继承
GObject::notify

通过 g_object_set_property()、g_object_set() 等方式设置其属性值时,将在对象上发出 notify 信号。