我可以使用libpng将PNG图像加载到内存中,并获取原始像素数据,也可以使用XCB或纯X11创建具有空白背景的窗口。
接下来该怎么做才能在窗口内显示图像呢?
XLib方法如下:
XImage
结构。XPutImage
。第二步可以通过调用XPutPixel
来实现每个单独的像素。您需要将RGB值转换为像素值。对于15位、16位、24位或32位可视化,这是一个使用位掩码进行微不足道的操作(使用visual->red_mask
确定红色组件的放置位置等)。如果要支持8位深度,则必须使用抖动,并分配和使用适当的颜色映射表,可能是一个216元素的彩色立方体。幸运的是,现在只有8位深度的硬件很少见了。
如果调用XPutPixel
速度太慢,您将不得不直接实现它所做的工作。使用例如this source提供的指导。
xcb有一个叫做xcb-util-image的库,其功能类似于XImage。我不太熟悉它。