X PixMap
{{Short description|Image file format}}
{{Infobox file format
| name = X PixMap
| screenshot = Screenshot-xterm-linux.xpm-GVIM.png
| screenshot_size = 240px
| caption = Some text editors, for example gvim, can display xpm images in graphical form.
| extension = .xpm
| mime = image/x-xpixmap.xpm MIME type not [https://www.iana.org/assignments/media-types/media-types.xhtml#image registered] at IANA
| owner = BULL Research
| creatorcode =
| genre = Image file formats
| containerfor =
| containedby =
| extendedfrom = XBM
| extendedto =
| open = yes
}}
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.{{cite book|last1= Le Hors |first1= Arnaud |title= XPM Manual: The X PixMap Format |url= http://www.xfree86.org/current/xpm.pdf|access-date= 2014-01-01 |date= 1996-02-01 |publisher= Groupe Bull |pages=7–8 |ref= CITEREFLeHors1996 }}{{cite web|url= http://www.w3.org/People/danield/xpm_story.html |archive-url= https://web.archive.org/web/19970607024723/http://www.w3.org/People/danield/xpm_story.html |url-status= dead |archive-date= 1997-06-07 |title= The XPM Story |author=Daniel Dardailler|others= Colas Nahaboo and Arnaud Le Hors |date=1996-07-15|access-date=2014-01-01 }}
It is intended primarily for creating icon pixmaps, and supports transparent pixels. Derived from the earlier XBM syntax, it is a plain text file in the XPM2 format or of a C programming language syntax, which can be included in a C program file.
History
= XPM1 =
The first (1989) XPM format is relatively similar to the XBM format.{{efn|For a description of this format in lieu of the manual (not found on the Internet), use xpm-contrib (formerly part of libXpm proper) converter (xpm2ppm, xpm1to3, xpm1to2c) source code.}} Compared to XBM, it uses additional macro definitions and variables for indexed colors, and replaces bits with characters for describing the image. The following is a black-and-white image in the 1989 XPM format.
- 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
= XPM2 =
XPM2 (1990) simplifies the format by removing all C code.{{efn|It is also acceptable to use programming language syntaxes for string arrays, but only the C syntax is attested. The "XPM2 C" syntax eventually became the only format in XPM version 3.}}{{efn|For references on this syntax, see https://gitlab.freedesktop.org/xorg/lib/libxpm/-/blob/master/NEWS.old and the "history" section of libXpm 3.4 manual.}} The structure is simplified to
! XPM2
- The value section describes the overall dimension of the image similar to the
#define
statements. - The color section defines the values, and a new concept of the "type" of the color. The types may be c for "color", m for "monochrome" output, g for "grayscale", and s for "symbolic", explaining what a defined color is supposed to do.
- The pixels and optional extensions remain as in the original format.
The above file, with width 48, height 4, 2 colors, and 1 character per pixel, becomes:
! XPM2
48 4 2 1
a c #FFFFFF
b c #000000
abaabaababaaabaabababaabaabaababaabaaababaabaaab
abaabaababaaabaabababaabaabaababaabaaababaabaaab
abaabaababaaabaabababaabaabaababaabaaababaabaaab
abaabaababaaabaabababaabaabaababaabaaababaabaaab
== Colors ==
In addition to hexcodes, the colors can be any of the X11 color names. In addition, None
indicates transparency.{{cite web|url=http://www.ibiblio.org/pub/X11/contrib/libraries/xpm.FAQ|title=The XPM FAQ|publisher=X.Org Foundation|year=1996|access-date=2016-03-12}}{{cite book|url=https://archive.org/details/mac_Graphics_File_Formats_Second_Edition_1996|title=XPM File Format Summary|isbn=1-56592-161-5|work=Encyclopedia of Graphics File Formats, 2nd Edition|access-date=2014-01-01|url-access=registration |last1=Murray |first1=James D. |last2=Vanryper |first2=William |date=1996 |publisher=O'Reilly & Associates }}
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.
== Many-color encoding ==
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, but might be a bad idea depending on the used text editor. Without control codes, backslash, and quote (needed in XPM1 and XPM3) 128 − 33 − 2 = 93 ASCII characters are available for single character color codes.
Simplified example: 90 US-ASCII characters could be arranged into nine non-overlapping sets of 10 characters. Thus unambiguous strings of nine characters could set the color of each pixel by its XPM palette index with up to 109 = {{val|1000000000}} colors (compare to GIF, which supports only 256).
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 (2 lines in the example above) and rows (height 4 in the example above), e.g. 2 + 2 + 4 = 8 lines.
= XPM3 =
The current and last format is XPM3 (1991). It re-introduces the C wrapper, but instead of explicitly showing a file's structure, the strings stored are essentially identical to XPM2.
/* XPM */
static char * XFACE[] = {
"48 4 2 1",
"a c #ffffff",
"b c #000000",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab"
};
If the "values" line contains six instead of four numbers, the additional values indicate the coordinates of a "hotspot", where 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
The following code displays the same blarg file in the XBM, XPM and PBM formats.
XBM version:
- define test_width 16
- define test_height 7
static char test_bits[] = {
0x13, 0x00, 0x15, 0x00, 0x93, 0xcd, 0x55, 0xa5, 0x93, 0xc5, 0x00, 0x80,
0x00, 0x60 };
XPM2 version:
! XPM2
16 7 2 1
- c #000000
. c #ffffff
- ..*...........
- .*.*...........
- ..*..**.**..**
- .*.*.*.*.*..*.*
- ..*..**.*...**
...............*
.............**.
XPM3 version:
/* XPM */
static char * blarg_xpm[] = {
"16 7 2 1",
"* c #000000",
". c #ffffff",
"**..*...........",
"*.*.*...........",
"**..*..**.**..**",
"*.*.*.*.*.*..*.*",
"**..*..**.*...**",
"...............*",
".............**."
};
PBM 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
ACDSee, Amaya, CorelDRAW, GIMP, ImageMagick, IrfanView (formats plugin), PaintShop Pro, PMView, Photoshop (plugins), and XnView among others support XPM.{{cite web|url=http://extension.nirsoft.net/xpm|title=.xpm Extension|author=Nir Sofer|access-date=2014-01-12}}{{cite web|url=http://shell.windows.com/fileassoc/0409/xml/redir.asp?EXT=xpm|publisher=Microsoft|work=Windows File Association
|title=File Type: X Windows Pixmap|year=2013|access-date=2014-01-12}} Gravatar also supports XPM.Gravatar unofficial, no XPM2{{cite web|url=http://kinzler.com/picons/ftp/index.html|title=Picons Archive|author=Steve Kinzler|author-link=Steve Kinzler|year=2005|quote=picons are in either monochrome XBM format or color XPM and GIF formats|access-date=2014-01-06}}
An X11 libXpm vulnerability was fixed in 2005,{{cite web
|url=http://www.kb.cert.org/vuls/id/537878 | id=VU#537878
|title=libXpm library contains multiple integer overflow vulnerabilities
|date=2005-10-06
|work=US-CERT
|access-date=2014-01-01}} and three more in 2023.{{cite web|url=https://lists.x.org/archives/xorg-announce/2023-January/003312.html |title=X.Org Security Advisory: Issues handling XPM files in libXpm prior to 3.5.15|date=2023-01-17}}
FFmpeg version 3.3 or later can decode XPM.{{cite web |url=https://www.ffmpeg.org/index.html#pr3.3 |title=FFmpeg 3.3 "Hilbert" |quote=XPM decoder |publisher=FFmpeg |date=2017-04-13 |access-date=2017-10-28}}
{{-}}
See also
- {{Annotated link|Netpbm}}
- {{Annotated link|CLUT}}
- {{Annotated link|X BitMap}}
Notes
{{notelist}}
References
{{Reflist}}
See also
- X Window System (X11) and X11 color names
- PBM (mono), PGM (grayscale), PPM (color), PNM (any)
- X BitMap
External links
- [https://gitlab.freedesktop.org/xorg/lib/libxpm libXpm - X Pixmap (XPM) image file format library]
{{Graphics file formats}}
{{DEFAULTSORT:X Pixmap}}