XImage
La structure de Xlib pour une image résidant dans la mémoire du client, par opposition à un pixmap résidant dans le serveur, et le chemin que prend chaque pixel quand un programme veut afficher quelque chose qu'il a calculé lui-même.
Dans un pixmap, on ne peut dessiner qu'avec les appels propres du serveur. Un programme qui veut écrire des pixels directement, comme une visionneuse d'images ou un lecteur vidéo, a besoin d'un tampon de son côté : un XImage. La structure décrit largeur, hauteur, profondeur, ordre des octets, bits par pixel, octets par ligne et les trois masques de couleur, plus un pointeur vers les données elles-mêmes. Le format est ZPixmap, un pixel entier à la fois, ou les anciennes variantes plan par plan XYPixmap et XYBitmap. XPutImage envoie le tampon vers une fenêtre ou un pixmap ; XGetImage récupère le contenu de l'écran dans l'autre sens.
Le piège, c'est que la disposition doit correspondre à la visual du serveur, et non aux suppositions du client. Un programme qui écrivait des pixels 24 bits sur un écran 16 bits, ou qui se trompait d'ordre des octets entre un SPARC et un PC, produisait des couleurs psychédéliques au lieu d'une image. XGetPixel et XPutPixel existent pour qui préfère ne pas faire l'arithmétique, mais ils sont lents. Sur un socket, chaque XPutImage coûte une copie, d'où XShmCreateImage dans MIT-SHM, qui place le tampon en mémoire partagée. Le format de fichier écrit par xwd est pour l'essentiel un tel en-tête suivi des données.