X PixMap
From Wikipedia, the free encyclopedia
|
|
This article has multiple issues. Please help improve the article or discuss these issues on the talk page.
|
Some text editors, for example gvim, can display xpm images in graphical form |
|
| Filename extension | .xpm |
|---|---|
| Internet media type | image/x-xpixmap unofficialimage/x-xpm unofficial |
| Developed by | BULL Research |
| Type of format | Image file formats |
| Extended from | XBM and Portable pixmap |
X Pixmap (XPM) is an ASCII-text-based image format used by the X Window System. It was created in 1989 by Daniel Dardailler and Colas Nahaboo working at Bull Research Center at Sophia Antipolis, France, and was later enhanced by Arnaud Le Hors.
It is intended primarily for creating icon pixmaps, and supports transparent color. It has a simple structure, deriving from the earlier XBM syntax. It can be created and manipulated using any text editor and can be included in a C language file.
Contents |
[edit] XPM
The XPM format is an array of strings composed of six different sections as follows:
static char* <variable_name>[] = { <Values> <Colors> <Pixels> <Extensions> };
This is a black and white image in the first (1989) XPM format.
/* XPM */ static char * XFACE[] = { /* <Values> */ "48 4 2 1", /* <Colors> */ "a c #ffffff", "b c #000000", /* <Pixels> */ "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab" };
[edit] XPM2
the simple XPM2 stripped all C idiosyncrasies from the code. An example:
! XPM2 128 128 64 1 z c #f6f6f6 Z c #eeeeee :''etc., palette using '''1''' character codes'' @ c #080808 . c #000000 ............................................
This is about an XPM2 image with width 128, height 128, 64 colors, using one character per pixel. One tool is known to use only a to p for 16 colors, switching to aa up to dp for 64 colors, but still reading single character encodings for 64 colors; compare Base64.
With more colors the codes use more characters, e.g. aa up to pp for 16*16=256 colors. This is less useful for text editors, because a string ab could be actually the middle of two adjacent pixels dabc. Spaces are allowed as color code, see links, but might be a bad idea depending on the used text editor. Without control codes, space, and quote (needed in XPM1 and XPM3) 128-33-2=93 ASCII characters are available for single character color codes.
For XPM2 it is clear how many lines belong to the image – two header lines, the second header line announcing the number of color codes (64 lines in the example above) and rows (height 128 in the example above), e.g. 2+64+128=194 lines.
The other styles are designed to be used as is in C source code, example:
#define XFACE_format 1 #define XFACE_width 48 #define XFACE_height 48 #define XFACE_ncolors 2 #define XFACE_chars_per_pixel 1 static char *XFACE_colors[] = { "a", "#ffffff", "b", "#000000" }; static char *XFACE_pixels[] = { "abaabaababaaabaabababaabaabaababaabaaababaabaaab", // and so on for 48 rows with 48 pixels
[edit] XPM3
The latter format is XPM3, the common format used for the X Window System since about 1991. The c means "color", it's possible to add m for "monochrome" output, g for "grayscale", and s for "symbolic", explaining what a defined color is supposed to do.
The "symbolic" feature permits adjusting colors depending on the context where they are used. Code such as s border c blue could be adjusted on a blue background.
If the width, height, colors, and characters per pixel line contains six instead of four numbers, the additional values indicate the coordinates of a "hotspot", 0 0 is the upper left corner of a box containing the icon and the default. A "hotspot" is used for mouse pointers and similar applications.
[edit] Comparison with other formats
The following code displays the same blarg file in XBM, XPM and PGM formats.
XBM version:
#define blarg_xbm_width 16 #define blarg_xbm_height 7 static char blarg_xbm_bits[] = { 0xec, 0xff, 0xea, 0xff, 0x6c, 0x32, 0xaa, 0x5a, 0x6c, 0x3a, 0xff, 0x7f, 0xff, 0x9f};
XPM version:
/* XPM */ static char * blarg_xpm[] = { "16 7 2 1", "* c #000000", ". c #ffffff", "**..*...........", "*.*.*...........", "**..*..**.**..**", "*.*.*.*.*.*..*.*", "**..*..**.*...**", "...............*", ".............**." }
XPM2 version:
! XPM2 16 7 2 1 * c #000000 . c #ffffff **..*........... *.*.*........... **..*..**.**..** *.*.*.*.*.*..*.* **..*..**.*...** ...............* .............**.
PGM file:
P1 16 7 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
[edit] See also
| The Wikibook Common_Lisp/Advanced_topics/Files_and_Directories has a page on the topic of |
[edit] External links
- XPM Manual and Format specification (pdf)
- The XPM Story (Daniel Dardailler)
- Mac OS X XPM apple event (example)
- X11 version 6.8.0 vulnerability 537878