如何将当前窗口保存为png等图像文件?
我知道我可以从当前窗口获得gdkWindow。我甚至可以得到图像。从这个图像结构体中,我甚至可以查询每个像素。但据我所知,我真正需要的是一个pixbuf。
int width;
int height;
this.GetSize(width, height);
this.GdkWindow.GetImage(0,0,width,height).?
我如何从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图像查看器的bug
使用gdk_pixbuf_get_from_drawable
从GdkWindow
到GdkPixbuf
,然后如果你想保存到一个文件使用gdk_pixbuf_save
。
在Cairo中,这是一种更具前瞻性的方法,您可以使用cairo_image_surface_create
,将结果传递给cairo_create
,再传递给gdk_cairo_set_source_window
,使用cairo_paint
复制到图像表面,然后使用cairo_surface_write_to_png
编写图像。
还要注意你的问题和这个问题很相似。然而,由于这个问题的答案不起作用,如果我的答案回答了你的问题,我将结束另一个问题作为这个的骗局。