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

时间:2016-10-08 23:02:42

标签: gtk gtk# gtk2 gdk gdkpixbuf

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

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

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

如何从中获取pixbuf 一个gtk窗口或 一个gdk窗口或 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图像查看器的错误

1 个答案:

答案 0 :(得分:1)

使用gdk_pixbuf_get_from_drawableGdkWindow转到GdkPixbuf,然后如果要保存到文件,请使用gdk_pixbuf_save

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

另请注意,您的问题与cairo_surface_write_to_png类似。但是,由于这个问题的答案不起作用,如果我的答案回答了你的问题,我会将另一个问题作为一个骗局。