Xlib provides an image structure that is capable of storing all
the data corresponding to a screen area or pixmap. The major difference
between an image and a pixmap is that an image is a structure on the
client side, so its contents can be manipulated directly by the client,
instead of solely through X protocol requests. Xlib provides the
XPutImage() that use the X protocol to transfer the
contents of a window or pixmap into an image structure and to write the
contents of an image structure back into a window or pixmap.
Xlib provides a few minimal routines for manipulating image structures, including routines to create and initialize an empty image structure, destroy an image structure, get a pixel, set a pixel, extract a subimage of an image, and add a constant value to all pixels in an image. These routines can be relatively slow, because they change the byte- and bit-order of the image before performing the operation and then change it back before placing it back in the image. However, in some implementations of Xlib, optimized versions of these routines will automatically be used when the byte- and bit-order used by the server happens to be the same as that used by the machine running the client. This should be quite fast but is not always available.
The image-processing routines provided by Xlib are minimal—they do not provide a complete image manipulation package. However, the image structure does contain all the information necessary to ...