我开始编写自己的窗口管理器,并想知道如何使用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一起跳舞。有点像这样: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top