A sample XBM file
|
|
Filename extension |
|
---|---|
Internet media type | image/x‑xbitmap, image/x‑xbm |
Type of format | Image file formats |
Extended from | C (programming language) |
Extended to | X PixMap (XPM) |
In computer graphics, the X Window System used X BitMap (XBM), a plain text binary image format, for storing cursor and icon bitmaps used in the X GUI. The XBM format was replaced by XPM for X11 in 1989.
XBM files differed markedly from most image files in that they took the form of C source files. This meant that they could be compiled directly into an application without any preprocessing steps, but it also made them far larger than their raw pixel data. The image data was encoded as a comma-separated list of byte values, each written in the C hexadecimal notation, '0x13' for example, so that multiple bytes are used to express a single byte of image information.
XBM data typically appeared in headers (.h files) and consisted of a series of static unsigned char arrays containing the monochrome pixel data. They featured one array per image stored in the header. The following piece of C code exemplifies an XBM file:
In place of the usual image-file-format header, XBM files had two or four #define statements. The first two #defines specified the height and width of the bitmap in pixels. The second two, if they existed, specified the position of any hotspot within the bitmap. (Programmers used a hotspot within the image for bitmapped cursors to define where to position the "pointer" of the cursor, generally at 0,0.)
The image data consisted of a line of pixel values stored in a static array. Because a single bit represented each pixel (0 for white or 1 for black), each byte in the array contained the information for eight pixels, with the upper left pixel in the bitmap represented by the low bit of the first byte in the array. If the image width did not match a multiple of 8, the display mechanism ignored and discarded the extra bits in the last byte of each row.