Как сохранить XImage как растровое изображение? - PullRequest
2 голосов
/ 29 октября 2010

Я пытаюсь создать библиотеку 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, она не должна использовать сторонние библиотеки.(как я понял).Пожалуйста помоги.Спасибо.

1 Ответ

3 голосов
/ 29 октября 2010

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

См. _Get_image_surface () в Каире, например:

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

...