如何将XImage保存为位图?

发布于 2024-09-29 21:19:55 字数 616 浏览 5 评论 0原文


我正在尝试创建 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 - 它不能使用第三方库。 (据我了解)。
请帮忙。
谢谢。

i'm trying to create JNI C++ library that will capture desktop video (frames).
First step is to simply make a screenshot of desktop. Code is :

#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;
}

But, how to save img as bitmap file ?
Because target library is JNI - it must not use third-party libraries. (as i understood).
Please, help.
Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

前事休说 2024-10-06 21:19:55

为此,您必须为所有可能的 XImage 格式或至少您的用户可能拥有的所有格式编写一个转换例程。

请参阅开罗的 _get_image_surface() 例如:

如果您无法使用第三方库,您将不得不重新实现类似的东西。
请注意,对于某些格式,它链接到 libpixman,因此代码比其中显示的更为复杂。

To do this you have to write a convert routine for all possible XImage formats, or at least all formats your users are likely to have.

See _get_image_surface() in cairo for example:

If you can't use a third-party library you will have to reimplement something like that.
Note that it's chaining to libpixman for some formats so the code is even more complex than it appears there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文