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

使用gtk将当前窗口另存为图像#,gtk,gtk#,gtk2,gdk,gdkpixbuf,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图像 编辑 这有点管用。输出

如何将当前窗口保存为图像文件(如png)

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

int width;
int height;
this.GetSize(width, height);
this.GdkWindow.GetImage(0,0,width,height).?
我怎样才能从你那里得到一个pixbuf gtk窗口或 gdk窗口或 gdk图像

编辑

这有点管用。输出的png大小正确,但模糊

编辑2

解决方案正在发挥作用。这种模糊是gnome图像查看器的一个缺陷,用于从
GdkWindow
GdkPixbuf
,如果要保存到文件,请使用

在Cairo,这是一种更适合未来的方法,你可以使用,将结果传递给,传递给,复制到你的图像表面,然后用它来写你的图像


还请注意,您的问题类似于。但是,由于这个问题的答案不起作用,如果我的答案回答了你的问题,我将关闭另一个问题作为重复。

你使用的是GTK+2还是3?我会说2,因为GTK夏普版本是2.12.0.0,在你调用
cairo\u surface\u write\u to\u png
之前,请确保调用
cairo\u t
。谢谢@Jason。我很乐意承认我没有测试过任何答案,事实上我没有使用GDK pixbufs或Cairo image后端的经验。我只知道我在GTK和Cairo docs的工作就是这样。我想你建议的电话有点必要,不是吗?(幸好OP没有使用Cairo:)
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");