I'm trying to take a screenshot of the entire screen with C and GTK. I don't want to make a call to an external application for speed reasons. I've found Python code for this (Take a screenshot via a python script. [Linux]); I just need to figure out how to do that in C.
Asked
Active
Viewed 6,142 times
6
-
1It rather looks like that Python code you linked to is a good crib into the GTK API calls you will need to use in C. – crazyscot Jun 26 '10 at 15:25
-
Hm, you're right. Between that and the gnome-screenshot code, I've figured it out. Thank you. – dieki Jun 26 '10 at 16:07
-
1possible duplicate of [Convert a GTK python script to C](http://stackoverflow.com/questions/3045850/convert-a-gtk-python-script-to-c) – u0b34a0f6ae Jun 26 '10 at 17:29
-
@kaizer.se not really the same question, but my answer to that one works as answer to this :P – Spudd86 Jun 27 '10 at 02:19
2 Answers
10
After looking at the GNOME-Screenshot code and a Python example, I came up with this:
GdkPixbuf * get_screenshot(){
GdkPixbuf *screenshot;
GdkWindow *root_window;
gint x_orig, y_orig;
gint width, height;
root_window = gdk_get_default_root_window ();
gdk_drawable_get_size (root_window, &width, &height);
gdk_window_get_origin (root_window, &x_orig, &y_orig);
screenshot = gdk_pixbuf_get_from_drawable (NULL, root_window, NULL,
x_orig, y_orig, 0, 0, width, height);
return screenshot;
}
Which seems to work perfectly. Thanks!
dieki
- 2,303
- 4
- 22
- 28
-
3Unfortunately this is now totally outdated and API's are removed since 3.10 – Lothar Apr 05 '17 at 23:35
3
9 years passed and as mentioned above API is removed.
As far as I understand, currently the bare minimum to do this at Linux is:
GdkWindow * root;
GdkPixbuf * screenshot;
gint x, y, width, height;
root = gdk_get_default_root_window ();
gdk_window_get_geometry (root, &x, &y, &width, &height);
screenshot = gdk_pixbuf_get_from_window (root, x, y, width, height);
// gdk_pixbuf_save...
This is very slightly tested and may fail. Further reading is in gnome-screenshooter repo
Alexander Dmitriev
- 2,358
- 1
- 14
- 19