X PixMap

From Wikipedia, the free encyclopedia
Jump to: navigation, search
X Pixmap
Screenshot-xterm-linux.xpm-GVIM.png
Filename extension .xpm
Internet media type image/x-xpixmap
image/x-xpm (both unofficial)
Developed by BULL Research
Type of format Image file formats
Extended from XBM and Portable pixmap

X Pixmap (XPM) is an image file format used by the X Window System, created in 1989 by Daniel Dardailler and Colas Nahaboo working at Bull Research Center at Sophia Antipolis, France, and later enhanced by Arnaud Le Hors.[1][2]

It is intended primarily for creating icon pixmaps, and supports transparent color. Derived from the earlier XBM syntax,[3] it is a plain text file of a C programming language syntax, which can be included in a C program file.[4]

Contents

XPM [edit]

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> */
/* <width/cols> <height/rows> <colors> <char on pixel>*/
"48 4 2 1",
/* <Colors> */
"a c #ffffff",
"b c #000000",
/* <Pixels> */
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab"
};

The values section contains the width, height, number of colors, and number of characters per pixel.

XPM2 [edit]

XPM2 simplifies the format by removing all C idiosyncrasies. 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 an XPM2 file 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

XPM3 [edit]

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.

Comparison with other formats [edit]

Blarg file opened in program window

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

Application support [edit]

The Arena web browser has full support since version 0.3.33 (21 July 1997)[5] The Agora World Wide Web email browser was also able to handle XPM.

See also [edit]

References [edit]

  1. ^ LeHors 1996, p. 7
  2. ^ Daniel, Dardailler; Colas Nahaboo and Arnaud Le Hors. "The XPM Story". Retrieved 2010-04-05. 
  3. ^ Kenton Lee (Sept. 1998). "What is XPM ?". The Motif FAQ. comp.windows.x.motif. 137. Retrieved 2010-04-05. 
  4. ^ LeHors 1996, p. 8
  5. ^ QingLong, Lu (24 March 1998). "Arena change history". Yggdrasil Computing. Archived from the original on 28 February 2003. Retrieved 3 June 2010. 

Bibliography and external links [edit]