题
我开始编写自己的窗口管理器,并想知道如何使用xorg api从原始图像数据(例如libpng给出的数据)获取到Xorg Pixmap或Xorg可绘制的东西?
解决方案
XCreatePixmapFromBitmapData应该做到这一点。请记住,您需要输入与xserver使用的位深度相同的数据。
其他提示
您可能自2008年以来的某个时候就发现了这一点,但是为了将来的读者...
XCreatePixmapFromBitmapData()会将文字位图(即1位,黑白)数据加载到像素图中。如果目标是从PNG加载,则很可能不是您想要的。
一种更新的方法是使用Cairo或GdkPixbuf。老式的Xlib API(例如XCreatePixmapFromBitmapData()和XDrawWhatever())都已被弃用(并不是实际上它们将被删除,但它们已经过时且与现代应用程序的工作方式不同步)。
这几天人们通常建议做事的方式是:
- 更喜欢libxcb而不是libX11,libxcb只是围绕X协议的一个非常薄的包装,并且缺少执行多个X协议请求的调用(例如CreatePixmapFromBitmapData会执行CreatePixmap,CreateGC,PutImage,FreeGC)
- 首选cairo(或类似的库,Skia是其中之一)而不是服务器端图形API
您可以将cairo_image_surface_create_from_png()用于简单目的,如果需要支持更多格式等,则可以使用GdkPixbuf。
您必须做的与XCreateImage,XCreatePixmap和XCopyArea一起跳舞。有点像这样: 通用标签
不隶属于 StackOverflow