Сохранить текущее окно как изображение, используя 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
,
Также обратите внимание, что ваш вопрос похож на этот. Тем не менее, поскольку ответ на этот вопрос не работает, если мой ответ отвечает на ваш вопрос, я закрою другой вопрос как обман.