Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <X11/Xlib.h>
- //-------------------------------------------------------------------------------------------------
- // gcc -shared -O3 -Wall -fPIC -Wl,-soname,get_screen -o get_screen.so get_screen.c -lX11
- //-------------------------------------------------------------------------------------------------
- GC createGC(Display* display, Window win){
- GC gc;
- int screen_num = DefaultScreen(display);
- unsigned long valuemask = 0;
- XGCValues values;
- values.subwindow_mode = IncludeInferiors;
- values.line_width = 2;
- valuemask = GCSubwindowMode | GCLineWidth;
- gc = XCreateGC(display, win, valuemask, &values);
- if (gc < 0) {
- fprintf(stderr, "XCreateGC: \n");
- }
- XSetForeground(display, gc, BlackPixel(display, screen_num));
- XSetBackground(display, gc, WhitePixel(display, screen_num));
- return gc;
- }
- void get_screen(const int dispNumber, const int xx,const int yy,const int W, const int H, /*out*/ unsigned char * data){
- Display *display;
- if (dispNumber == 1) {
- display = XOpenDisplay(":1.0");
- printf("Screenshoting display :1.0\n");
- }else{
- display = XOpenDisplay(":0.0");
- printf("Screenshoting display :0.0\n");
- }
- Window root = DefaultRootWindow(display);
- XImage *image = XGetImage(display,root, xx,yy, W,H, AllPlanes, ZPixmap);
- unsigned long red_mask = image->red_mask;
- unsigned long green_mask = image->green_mask;
- unsigned long blue_mask = image->blue_mask;
- int x, y;
- int ii = 0;
- for (y = 0; y < H; y++) {
- for (x = 0; x < W; x++) {
- unsigned long pixel = XGetPixel(image,x,y);
- unsigned char blue = (pixel & blue_mask);
- unsigned char green = (pixel & green_mask) >> 8;
- unsigned char red = (pixel & red_mask) >> 16;
- data[ii + 2] = blue;
- data[ii + 1] = green;
- data[ii + 0] = red;
- ii += 3;
- }
- }
- XDestroyImage(image);
- XDestroyWindow(display, root);
- XCloseDisplay(display);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement