以下脚本将在Gnome桌面上进行截图。
import gtk.gdk w = gtk.gdk.get_default_root_window() sz = w.get_size() pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False, 8, sz[0], sz[1]) pb = pb.get_from_drawable(w, w.get_colormap(), 0, 0, 0, 0, sz[0], sz[1]) if (pb != None): pb.save("screenshot.png", "png") print "Screenshot saved to screenshot.png." else: print "Unable to get the screenshot."
现在,我一直试图将其转换为C,并在我正在编写的其中一个应用程序中使用它,但到目前为止,我一直不成功。 C(在Linux上)有什么要做的吗?
谢谢! 杰西。
我测试了这个,它确实有效,但是从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
编辑:保存pixbuf的东西也可能是这样的:(注意我没有尝试这个,但它只是一行…)感谢kaiser.se指出我在文档阅读失败:P
gdk_pixbuf_save(pb, "screenshot.png", "png", NULL, NULL);