# X PixMap

X Pixmap (XPM) es un formato de archivo gráfico usado por X Window System, creado en 1989 por Daniel Dardailler y Colas Nahaboo trabajando para Bull Research Center en Sophia Antipolis, Francia, y luego mejorado por Arnaud Le Hors.
Fue creado inicialmente para mapas de pixeles en iconos, y soportaba transparencia en color. Descendiente del antiguo XBM, es un archivo en texto plano con sintaxis de lenguaje C, por lo que puede ser incluido en una fuente de un programa en lenguaje C.

## X BitMap

El formato X BitMap (XBM) es el predecesor de X PixMap. Es un formato en texto plano para bitmaps (imágenes en blanco y negro).
Los archivos XBM se diferenciaron marcadamente de la mayoría de formatos de imagen en que tenían la forma de archivos de código fuente de C. Esto significó que podían ser compilados directamente en una aplicación sin ningún tipo de 'pre-procesamiento', pero también los hizo mucho más grandes que su información en forma binaria. Los datos de la imagen estaban codificados como una lista de bytes separados con coma, escritos en formato hexadecimal de C (por ejemplo '0x13').
Los datos XBM aparecían normalmente en archivos cabecera(.h), y estaban formados por una serie de arrays de bytes, cada uno representando una imagen en la cabecera.
Los datos de una imagen consistían en un array estático de chars para guardar los valores de los píxeles. Como cada pixel era representado por un solo bit (0 blanco, 1 negro), cada byte en el array contenía la información para ocho píxeles, con el pixel superior izquierdo representado por el menor bit del primer byte. Si el ancho de la imagen no era múltiplo de 8, se ignoraban los bits sobrantes del último byte en cada columna.
En lugar de las usuales cabeceras de 'archivos formato de imagen', los archivos XBM tenían cuatro declaraciones #define, las primeras dos indicaban el alto y ancho de la imagen en pixeles, y las otras dos, si existían, indicaban la posición de algún 'hotspot' en la imagen (Estos se usaban para indicar la posición del "puntero" en imágenes de cursor).
El formato XBM fue remplazado por XPM para X11 en 1989.

## Sintaxis
### XPM

El formato XPM es un vector de cadenas de caracteres en lenguaje C compuesto de seis secciones como se describe a continuación:
Esta es una imagen en blanco y negro en la primera versión de XPM (1989):
La sección de valores contiene el ancho, la altura, el número de colores, y el número de caracteres por pixel.

### XPM2

XPM2 simplifica el formato quitando la sintaxis en lenguaje C. Un ejemplo::
Este es un archivo de formato XPM2 con un ancho de 128, altura e 128, 64 colores, usando un carácter por pixel.
Una opción es usar solo la a hasta la p para 16 colores, cambiando a aa hasta dp para 64 colores. Con más colores los códigos usan más caracteres, por ejemplo aa hasta pp para 16*16=256 colores.
Otros estilos de XPM2 fueron diseñados para ser usados en código fuente en C, por ejemplo:

## Compatibilidad con GdkPixBuf

GdkPixbuf.Pixbuf.new_from_xpm (parte de la librería Gdk), no permite la línea
y requiere que, en lugar de un solo texto, el xpm sea una lista de cadenas de texto.
El ejemplo arriba, se convierte entonces en
(similar a los formatos de C).

### XPM3

El último formato es XPM3, el más utilizado en X Window System desde 1991. La c significa "color", es posible agregar m para salidas "monocromáticas", g para "escalas de grises", y s para "simbólicas", está última, permite adjuste de colores dependiendo de contexto donde se usan. Un código como s border c blue podría ajustarse en un fondo azul.
Si el ancho, la altura, los colores, y los caracteres por pixel contienen seis en vez de cuatro números, los valores adicionales indican la coordenada de un "hotspot", 0 0 es elvértice izquierdo más alto de la caja que contiene el ícono y es el valor por defecto. un "hotspot" es utilizado por los punteros del mouse y aplicaciones similares.

### Comparación con otros formatos

Los siguientes ejemplos comparan un archivo con la leyenda "Blarg" en formatos XBM, XPM y PGM.
Versión en XBM:
Versión en XPM:
Versión en XPM2:
Versión en PGM: