1

如何将当前窗口保存为 png 等图像文件?

我知道我可以从当前窗口中获取 gdkWindow。我什至可以得到一个图像。从这个图像结构中,我什至可以查询每个像素。但据我了解,我真正需要的是获得一个 pixbuf。

int width;
int height;
this.GetSize(width, height);
this.GdkWindow.GetImage(0,0,width,height).?

如何从 gtk 窗口或 gdk 窗口或 gdk 图像获取 pixbuf?

编辑

int width;
int height;
this.GetSize(out width, out height);
Pixbuf pixbuf = Pixbuf.FromDrawable (this.GdkWindow, this.Colormap, 0, 0, 0, 0, width, height);
pixbuf.Save("/tmp/out.png","png");

有点工作。png 以正确的大小导出,但它是模糊的。

编辑 2

解决方案正在发挥作用。模糊是 gnome 图像查看器的错误

4

1 回答 1

2

使用gdk_pixbuf_get_from_drawable从 获取GdkWindowGdkPixbuf,然后如果要保存到文件使用gdk_pixbuf_save.

在开罗,这是一种更具前瞻性的方法,您可以使用cairo_image_surface_create,将结果传递给 ,将结果cairo_create传递给gdk_cairo_set_source_window,使用 复制到您的图像表面cairo_paint,然后使用 写入您的图像cairo_surface_write_to_png

另请注意,您的问题与类似。但是,由于该问题的答案不起作用,如果我的答案回答了您的问题,我将关闭另一个问题,以此作为欺骗。

于 2016-10-08T23:31:23.233 回答