将xlib XImage保存到PNG

dig*_*foo 5 c linux x11 xlib xorg

我正在使用xlib.

我有一个XImage结构,其中包含来自XGetImage()调用的信息.是否有一种流行的方法可以从XImage获得更有意义的东西..即PNG?

我看过libpng,但几乎每个人都听说这是一个驯服的野兽.这仍然是推荐的路径吗?

Hav*_*c P 5

另请参阅如何将 XImage 保存为位图?尽管那个人有他们不能使用图书馆的限制。

如果您可以使用图书馆,我相信开罗是一个很好的图书馆,可以为您做到这一点。它有 PNG 保存,可以为您处理 libpng 乱七八糟的问题,并且有从 X 获取像素的代码。但是,从 XImage 获取像素可能会很困难;它将希望从窗口或像素图中获取它们。如果你可以用 cairo 替换你的 XGetImage() ,那么它可能会正常工作。我认为你在开罗粗略地做事的方式是:

您还可以使用 Xlib 表面作为源来绘制图像表面,然后在保存为 PNG 之前根据需要对图像表面执行其他操作(缩放或绘画或其他)。

如果您使用任何类型的 UI 工具包,它可能也有用于此的代码,例如 GTK+ 有 gdk_pixbuf_get_from_drawable() 等。