0
0 комментариев

Требуется питоновским скриптом сделать скриншот и сохранить результат в переменную. PIL.Image.Grab не работает под линуксом, поэтому решил скриншот делать средствами С, нашел пример, но так как в С понимаю чуть меньше, чем ничего, не получается изменить его так, чтобы он возвращал изображение в виде переменной. Собрал библиотеку, при вызове её из питона она выдает ошибку.
Помогите исправить функции С.

//++++ newmain.c
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "newfile.h"
 
#define X 0
#define Y 0
#define WIDTH 600
#define HEIGHT 300
#define DISPLAY_WIDTH 1600
#define DISPLAY_HEIGHT 900
extern int errno;
extern int image;
 
int main()
{
    Display     *display;
    Window      window;
    XEvent      event;
    int         screen;
    XImage      *image;
    GC          graph_ctx;
    XGCValues   *gc_values;
 
    if ((display = XOpenDisplay(getenv("DISPLAY"))) == NULL)
    {
        printf("Can't connect X server: %s\n", strerror(errno));
        exit(1);
    }
 
    screen = XDefaultScreen(display);
    image = XGetImage(display, DefaultRootWindow(display), 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, AllPlanes, ZPixmap);
    XCloseDisplay(display);
    return 0;}
//++++ newfile.h
#ifndef NEWFILE_H extern str image
#define NEWFILE_H __declspec(dllexport)
 
#ifdef  __cplusplus
extern "C" {[str] __declspec(dllexport) __stdcall [image]
#endif
 
#ifdef  __cplusplus
}
#endif
#endif  /* NEWFILE_H */
//dll.def
LIBRARY    "sampdll"
 
EXPORTS
    main
//++++ image.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from ctypes import *
 
a = CDLL('/home/user/Desktop/python/dll/dll.so')
print (a)
//++++ ошибка
Traceback (most recent call last):
File "35.py", line 38, in <module>
a = CDLL('/home/user/Desktop/python/dll/dll.so')
File "/usr/lib64/python3.4/ctypes/__init__.py", line 351, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /home/user/Desktop/python/dll/dll.so: undefined symbol: XOpenDisplay


Добавить комментарий