Я проверил это, и оно работает, но может быть более простой путь перехода от GdkPixbuf к png, это был только первый, который я нашел.(Нет gdk_pixbuf_save()
)
#include <unistd.h>
#include <stdio.h>
#include <gdk/gdk.h>
#include <cairo.h>
int main(int argc, char **argv)
{
gdk_init(&argc, &argv);
GdkWindow *w = gdk_get_default_root_window();
gint width, height;
gdk_drawable_get_size(GDK_DRAWABLE(w), &width, &height);
GdkPixbuf *pb = gdk_pixbuf_get_from_drawable(NULL,
GDK_DRAWABLE(w),
NULL,
0,0,0,0,width,height);
if(pb != NULL) {
cairo_surface_t *surf = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
width, height);
cairo_t *cr = cairo_create(surf);
gdk_cairo_set_source_pixbuf(cr, pb, 0, 0);
cairo_paint(cr);
cairo_surface_write_to_png(surf, "screenshot.png");
g_print("Screenshot saved to screenshot.png.\n");
} else {
g_print("Unable to get the screenshot.\n");
}
return 0;
}
, который вы скомпилируете следующим образом: (при условии, что вы сохраните его как screenshot.c)
gcc -std=gnu99 `pkg-config --libs --cflags gdk-2.0` screenshot.c -o screenshot
Edit: материал для сохранения pixbufтакже может выглядеть так: (обратите внимание, я не пробовал это, но это только одна строка ...) Спасибо kaizer.se за указание на мою ошибку при чтении документа: P
gdk_pixbuf_save(pb, "screenshot.png", "png", NULL, NULL);