如何将图像保存为位图?

时间:2010-10-29 07:31:28

标签: c++ linux java-native-interface x11 xlib


我正在尝试创建将捕获桌面视频(帧)的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 个答案:

答案 0 :(得分:3)

要做到这一点,你必须为所有可能的XImage格式编写转换例程,或至少为用户可能拥有的所有格式编写。

请参阅cairo中的_get_image_surface(),例如:

如果你不能使用第三方库,你将不得不重新实现这样的东西。 请注意,它为某些格式链接到libpixman,因此代码比它出现的更复杂。