C++(LINUX)使用DevIL设置X11窗口背景

C++ (LINUX) set X11 window background with DevIL

本文关键字:设置 X11 窗口 背景 DevIL 使用 LINUX C++      更新时间:2023-10-16

我正在尝试为使用Xlib创建的窗口之一设置背景图像。我希望图像是JPEG或PNG。我下载了DevIL(我更喜欢使用它,因为它支持很多格式)。

所以,我的问题是,我该怎么做?我找不到任何特定的教程或帮助。
我了解如何使用 DevIL 将图像加载到流中,但如何将其放在窗口上?我在这里找到了一个答案:使用 xlib 将图像加载到窗口中,但我不知道应该如何以及哪个函数应该接收图像字节。正如我也理解的那样,我应该有一个XImage来保存所有图像,并且我将与XPutImage一起使用。我不明白的是如何将图像的字节从 DevIL 发送到 XImage。

有人知道任何有用的页面或关于我应该如何做的一些线索吗?
谢谢!

用于创建XImage的 Xlib 函数是 XCreateImage,它的用法如下所示(您可以在链接中阅读完整的描述):

XImage *XCreateImage(display, visual, depth, format, offset, data, 
                    width, height, bitmap_pad, bytes_per_line)

其中,您的特定问题的相关参数是数据,这是一个char*,指向使用 DevIL 加载图像数据的位置。 有了这个,您应该能够按照您已经找到的其他答案中的步骤进行操作。

编辑添加:

您仍然需要告诉DevIL如何格式化图像数据,以便XCreateImage可以理解它。 例如,以下一对函数调用将创建一个正确显示的 XImage:

ilCopyPixels(
    0, 0, 0, 
    image_width, image_height, 1, 
    IL_BGRA, IL_UNSIGNED_BYTE, 
    image_data
);
// ...
XImage* background = XCreateImage(
    display,
    XDefaultVisual(display, XDefaultScreen(display)), 
    XDefaultDepth(display, XDefaultScreen(display)),
    ZPixmap,
    0,
    image_data,
    image_width,
    image_height,
    32,
    0
);

,如果你选择IL_RGBA,颜色将关闭!