C++ 如何将XImage保存为位图?

C++ 如何将XImage保存为位图?,c++,linux,java-native-interface,x11,xlib,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); sc


我试图创建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;
}
#包括
#包括
使用名称空间std;
int main()
{
显示*显示;
int屏幕;
窗根;
显示=xOpen显示(0);
屏幕=默认屏幕(显示);
根=根窗口(显示,屏幕);
XImage*img=XGetImage(display,root,0,0400400,XAllPlanes(),ZPixmap);
如果(img!=NULL)
{
//在此处保存图像
}
返回0;
}
但是,如何将img保存为位图文件? 因为目标库是JNI,所以它不能使用第三方库。(据我所知)。
请帮忙

谢谢。

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

例如,请参见开罗的_get_image_surface():

如果您不能使用第三方库,则必须重新实现类似的功能。 请注意,对于某些格式,它链接到libpixman,因此代码甚至比这里显示的更复杂