Как сохранить XImage как растровое изображение?


я пытаюсь создать библиотеку JNI C++, которая будет захватывать видео с рабочего стола (кадры). Первый шаг — просто сделать скриншот рабочего стола. Код:

#include <iostream>
#include <X11/Xlib.h>

using namespace std;

int main()
{
        Display *display;
        int screen;
        Window root;
        display = XOpenDisplay(0);
        screen = DefaultScreen(display);
        root = RootWindow(display, screen);
        XImage *img = XGetImage(display,root,0,0,400,400,XAllPlanes(),ZPixmap);

        if (img != NULL)
        {
           //save image here
        }
        return 0;
}

Но как сохранить img как растровый файл? Поскольку целевая библиотека является JNI, она не должна использовать сторонние библиотеки. (как я понял).
Помогите пожалуйста.
Спасибо.


person Degot    schedule 29.10.2010    source источник


Ответы (1)


Для этого вам нужно написать процедуру преобразования для всех возможных форматов XImage или, по крайней мере, для всех форматов, которые могут быть у ваших пользователей.

См., например, _get_image_surface() в cairo:

Если вы не можете использовать стороннюю библиотеку, вам придется переделать что-то подобное. Обратите внимание, что для некоторых форматов он связан с libpixman, поэтому код еще более сложен, чем кажется там.

person Havoc P    schedule 29.10.2010