【问题标题】:save current window as image using gtk#使用 gtk# 将当前窗口保存为图像#
【发布时间】:2016-10-08 23:02:42
【问题描述】:

如何将当前窗口保存为 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 图像查看器的错误

【问题讨论】:

  • 你使用的是 GTK+2 还是 3?
  • 我会说 2 因为 gtk-sharp 版本是 2.12.0.0

标签: gtk gtk# gtk2 gdk gdkpixbuf


【解决方案1】:

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

在开罗,这是更面向未来的方法,您可以使用cairo_image_surface_create,将结果传递给cairo_create,将其传递给gdk_cairo_set_source_window,使用cairo_paint 复制到您的图像表面,然后编写您的带有cairo_surface_write_to_png 的图片。

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

【讨论】:

  • 在您致电cairo_surface_write_to_png 之前,请确保您在您的cairo_t 上致电cairo_paint
  • 谢谢@Jason。我很乐意承认我没有测试任何这个答案,事实上我没有使用 GDK pixbufs 或 Cairo 图像后端的经验。我只知道 GTK 和 Cairo docs 的方式。我想你建议的电话有点必要,不是吗? (好在 OP 没有使用 Cairo :))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多