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

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

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

最佳答案

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

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

您特定问题的相关参数为 data ,这是一个char*,它指向您将图像数据保存在DevIL中的位置。这样,您就可以按照in the other answer you already found的步骤进行操作了。

编辑添加:

您仍然必须告诉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,则颜色将关闭!

关于c++ - C++(LINUX)使用DevIL设置X11窗口背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12474854/

10-10 00:26