另请参阅如何将 XImage 保存为位图?尽管那个人有他们不能使用图书馆的限制。
如果您可以使用图书馆,我相信开罗是一个很好的图书馆,可以为您做到这一点。它有 PNG 保存,可以为您处理 libpng 乱七八糟的问题,并且有从 X 获取像素的代码。但是,从 XImage 获取像素可能会很困难;它将希望从窗口或像素图中获取它们。如果你可以用 cairo 替换你的 XGetImage() ,那么它可能会正常工作。我认为你在开罗粗略地做事的方式是:
您还可以使用 Xlib 表面作为源来绘制图像表面,然后在保存为 PNG 之前根据需要对图像表面执行其他操作(缩放或绘画或其他)。
如果您使用任何类型的 UI 工具包,它可能也有用于此的代码,例如 GTK+ 有 gdk_pixbuf_get_from_drawable() 等。