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

标签 c++ image background window x11

我正在尝试为使用 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++ (LINUX) 使用 DevIL 设置 X11 窗口背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474854/

相关文章:

c++ - 使用删除-删除范例将元素从一个 vector move 到另一个 vector

c++ - 从类型 ‘foo*&’ 的右值初始化类型 ‘foo*’ 的非常量引用无效?

C++是否有必要在主作用域的末尾删除动态分配的对象?

ajax - 通过ajax请求将字符串发送到php gd

java - 来自 C++ 的 JNI Java;打印输出?

php - Laravel 4 HTML 图像

css - 图像作为 ie7+8 中视网膜显示的背景

具有 3 个方向的 css 背景

iphone - 在后台模式下使用 App 接收通知

c++ - Qt 覆盖 QLabel PaintEvent