C++(LINUX)使用DevIL设置X11窗口背景
C++ (LINUX) set X11 window background with DevIL
我正在尝试为使用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
,颜色将关闭!
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- std::设置自定义比较器
- 如何设置一个范围来提取我想要获得的信息
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 通过选项卡的文本设置QTabWidget顺序
- 我应该如何使用 X11、motif、绘图区域和 c++ 来设置绘图区域 (X,Y) 坐标 (0,0)
- C++(LINUX)使用DevIL设置X11窗口背景