将GTK Python脚本转换为C语言
下面这个脚本可以在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语言,并在我正在写的一个应用程序中使用,但到目前为止我还没有成功。有没有什么办法可以在Linux上用C语言做到这一点呢?
谢谢!
Jess.
1 个回答
3
我测试过这个方法,确实可以用,但可能还有更简单的方法可以把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的代码也可以写成这样:(注意我没有实际试过这个,但就一行代码而已……感谢kaizer.se指出我在阅读文档时的错误 :P)
gdk_pixbuf_save(pb, "screenshot.png", "png", NULL, NULL);