Xorg 加载图像
我开始编写自己的窗口管理器,并且想知道如何使用 xorg api 从原始图像数据(例如 libpng 给出的数据)获取 Xorg Pixmap 或 Xorg 可绘制的内容?
I'm starting to code up my own window manager, and was wondering how to use the xorg api to get from raw image data ( such as the data given by libpng ), into an Xorg Pixmap or something drawable by Xorg?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能在 2008 年以来的某个时候发现了这一点,但为了未来读者的利益...
XCreatePixmapFromBitmapData() 会将文字位图(即 1 位、黑白)数据加载到像素图中。 如果目标是从 PNG 加载,这很可能不是您想要的。
一种较新的方法是使用 Cairo 或 GdkPixbuf。 老式的 Xlib API,例如 XCreatePixmapFromBitmapData() 和 XDrawWhatever() 几乎都已被弃用(并不是说它们实际上会被删除,而是它们已经过时并且与现代应用程序的工作方式不同步)。
人们现在通常推荐的做法是:
您可以使用 cairo_image_surface_create_from_png() 来实现简单的目的,或者如果您需要支持更多格式等,则可以使用 GdkPixbuf。
You probably discovered this at some point since 2008, but for the benefit of future readers...
XCreatePixmapFromBitmapData() will load literal bitmap (i.e. 1-bit, black&white) data into a pixmap. This is most likely not what you want, if the goal is to load from a PNG.
A newer way to do this is to use Cairo or GdkPixbuf. The old-school Xlib APIs such as XCreatePixmapFromBitmapData() and XDrawWhatever() are all pretty much deprecated (not that they will actually be removed ever, but they are outdated and out of sync with how modern apps work).
The way people would generally recommend doing things these days is:
You could use cairo_image_surface_create_from_png() for simple purposes or GdkPixbuf if you need to support more formats, etc.
XCreatePixmapFromBitmapData 应该做到这一点。 请记住,您需要输入与 xserver 正在使用的位深度相同的数据。
XCreatePixmapFromBitmapData should do just that. Remember that you need to feed in data of the same bit depth as your xserver is using.
您必须与 XCreateImage、XCreatePixmap 和 XCopyArea 进行一些互动。 它有点像这样:
There's a little dance with XCreateImage, XCreatePixmap and XCopyArea you have to do. It goes a little like this: