Zobacz także How to save XImage as bitmap?, chociaż ta osoba miała ograniczenie, że nie może korzystać z biblioteki.
Jeśli możesz korzystać z biblioteki, Kair jest dobrym, który zrobi to za Ciebie. Ma zapis PNG zajmujący się libpng dla ciebie i ma kod, aby uzyskać piksele z X. Jednak może to utrudnić uzyskanie pikseli z XImage; będzie chciał je pobrać z okna lub pixmapy. Jeśli możesz po prostu zastąpić XGetImage() cairo, to może działać dobrze. Sposób, by robić rzeczy z grubsza w Kairze moim zdaniem jest:
Można również skorzystać z powierzchni xlib jako źródła do narysuj na powierzchni obrazu, a następnie wykonaj inne czynności z powierzchnią obrazu (skalowanie lub malowanie na nim lub cokolwiek innego), jeśli chcesz, przed zapisaniem jako PNG.
Jeśli używasz dowolnego zestawu narzędzi interfejsu użytkownika, prawdopodobnie ma on również kod, np. GTK + ma gdk_pixbuf_get_from_drawable() itp.
http://stackoverflow.com/questions/4462958/writing-bitmap-to-string-insted-of-file-or-ximage-to-png –