Ver también How to save XImage as bitmap? aunque esa persona tenía la restricción de que no podían utilizar una biblioteca.
Si puede utilizar una biblioteca, El Cairo es una buena que va a hacer esto para usted creo. Tiene PNG guardando el libpng mess para usted, y tiene código para obtener los píxeles de X. Sin embargo, puede hacer que sea difícil obtener píxeles de un XImage; querrá obtenerlos de una ventana o pixmap. Si solo puedes reemplazar tu XGetImage() con cairo, entonces podría funcionar bien. La forma en que lo haría cosas más o menos en El Cairo Creo que es:
También es posible usar la superficie Xlib como fuente de dibuja en una superficie de imagen y luego haz otras cosas con la superficie de la imagen (escala o pintura en él o lo que sea) si lo deseas, antes de guardar como PNG.
Si está utilizando cualquier tipo de interfaz de usuario de juego de herramientas, es probable que tenga código para esto también, por ejemplo, GTK + tiene gdk_pixbuf_get_from_drawable() etc.
http://stackoverflow.com/questions/4462958/writing-bitmap-to-string-insted-of-file-or-ximage-to-png –