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



如何将当前窗口保存为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_drawableGdkWindowGdkPixbuf,然后如果你想保存到一个文件使用gdk_pixbuf_save

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

还要注意你的问题和这个问题很相似。然而,由于这个问题的答案不起作用,如果我的答案回答了你的问题,我将结束另一个问题作为这个的骗局。

相关内容

  • 没有找到相关文章

最新更新