Сохранить текущее окно как изображение, используя gtk#

Как я могу сохранить текущее окно как файл изображения, такой как 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

Решение работает. Размытость была ошибкой гнома просмотра изображений

1 ответ

Решение

Использование gdk_pixbuf_get_from_drawable чтобы получить от GdkWindow к GdkPixbuf, а затем, если вы хотите сохранить в файл, используйте gdk_pixbuf_save,

В Каире, который является более перспективным методом, вы можете использовать cairo_image_surface_create передать результат cairo_create передать это gdk_cairo_set_source_window скопируйте на поверхность изображения cairo_paint и напишите свое изображение с cairo_surface_write_to_png,

Также обратите внимание, что ваш вопрос похож на этот. Тем не менее, поскольку ответ на этот вопрос не работает, если мой ответ отвечает на ваш вопрос, я закрою другой вопрос как обман.

Другие вопросы по тегам