2010-06-15 3 views
0

다음 스크립트는 Gnome 데스크탑에서 스크린 샷을 찍습니다.GTK 파이썬 스크립트를 C로 변환

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)에서이 작업을 수행 할 수 있습니까?

감사합니다. Jess.

+1

지금까지 무엇을 얻었습니까? – Ken

+0

글쎄, 먼저 GTK에 몇 가지 추가를 시도해보십시오 (http : // maemo에서 http://maemo.org/api_refs/5.0/beta/hildon/hildon-Additions-to-GTK+.html 및 스크린 샷 샘플 참조). .gitorious.org/hildon/hildon/blobs/hildon-2-2/examples/hildon-gtk-window-take-screenshot-sync.c)하지만 의존성을 가져온 것은 XGetImage (http : // tronche.com/gui/x/xlib/graphics/XGetImage.html)하지만 컴파일하려면 Xorg devel libs가 필요합니다 ... http://www.codase.com/ 여기에서 샘플을 볼 수 있습니다. search/call? name = xgetimage 그리고 이제 막혔다. – Jessica

+1

말 그대로 번역 해 보면,'gtk.gdk.get_default_root_window'는'gdk_get_default_root_window'가됩니다! – u0b34a0f6ae

답변

3

나는 이것을 테스트했지만 작동하지만 GdkPixbuf에서 찾은 첫 번째 것이었던 png로가는 더 간단한 방법이있을 수 있습니다.

gcc -std=gnu99 `pkg-config --libs --cflags gdk-2.0` screenshot.c -o screenshot 

편집을 (당신이 screenshot.c로 저장 가정) : 물건을 추천 해 볼 수있는 pixbuf을 저장 :

#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; 
} 

당신은 다음과 같이 컴파일 것 (더 gdk_pixbuf_save() 없다() 나는 이것을 시험해 보지 않았다. 그러나 그것은 단지 한 줄에 불과하다.) 카이저에게 감사한다. 나는 독서에 실패했다는 것을 지적했다 : P

gdk_pixbuf_save(pb, "screenshot.png", "png", NULL, NULL); 
+1

gdk_pixbuf_save : http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf3-file-saving.html#gdk-pixbuf-save – u0b34a0f6ae

+0

아, 그걸 보지 못했습니다 ... devhelp에서 검색 ... 아, 잘 – Spudd86

+0

환상, 감사합니다. 그냥 부차적 인 질문으로, gdk_get_default_root_window()가 나에게 바탕 화면을 줄 것이다, 현재 윈도우를 얻을 수있는 방법이 있습니까? – Jessica