使用 gtk 将当前 window 保存为图像#

save current window as image using gtk#

如何将当前 window 保存为图像文件,例如 png?

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

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

我如何从 一个 gtk window 或 一个 gdk window 或 gdk 图片 ?

编辑

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 图像查看器的一个错误

使用gdk_pixbuf_get_from_drawable to get from the GdkWindow to a GdkPixbuf, then if you want to save to a file use gdk_pixbuf_save.

在开罗,这是更适合未来的方法,您可以使用 cairo_image_surface_create, pass the result to cairo_create, pass that to gdk_cairo_set_source_window, copy to your image surface with cairo_paint, and write your image with cairo_surface_write_to_png

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