См. Также Как сохранить XImage как растровое изображение? хотя у этого человека было ограничение, что он не мог использовать библиотеку.
Если вы можете использовать библиотеку, Каир - хорошийтот, который сделает это для тебя, я верю.Он имеет сохранение PNG, связанное с беспорядком libpng для вас, и имеет код для получения пикселей от X. Однако, это может затруднить получение пикселей из XImage;он захочет получить их из окна или растрового изображения.Если вы можете просто заменить свой XGetImage () на cairo, то он может работать нормально.Я думаю, что в Каире все будет примерно так:
Вы также можете использовать поверхность Xlib в качестве источника для рисования на поверхности изображения, а затем выполнять другие операции с поверхностью изображения (масштабировать или рисовать на ней или как угодно), если хотите, перед сохранением в формате PNG.
Если вы используете какой-либо инструментарий пользовательского интерфейса, он, вероятно, также имеет код для этого, например, GTK + имеет gdk_pixbuf_get_from_drawable () и т. Д.