X PixMap

X Pixmap


Algunos editores de texto, por ejemplo gvim, pueden mostrar imágenes xpm en forma gráfica.
Desarrollador
BULL Research
Información general
Extensión de archivo .xpm
Tipo de MIME image/x-xpixmap
image/x-xpm (ambos no oficiales)
Número mágico 2F2A2058504D202A2F
Tipo de formato Gráficos
Extendido de XBM y Portable pixmap
Formato abierto Sí 

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.[1][2]

Fue creado inicialmente para mapas de pixeles en iconos, y soportaba transparencia en color. Descendiente del antiguo XBM,[3]​ 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.[4]

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:

static char* <nombre_de_variable>[] = {
<Valores>
<Colores>
<Pixeles>
<Extensiones>
};

Esta es una imagen en blanco y negro en la primera versión de XPM (1989):

/* XPM */
static char * XFACE[] = {
/* <Valores> */
/* <ancho/columnas> <altura/filas> <colores> <caracteres por pixel>*/
"48 4 2 1",
/* <Colores> */
"a c #ffffff",
"b c #000000",
/* <Pixeles> */
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab"
};

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::

! XPM2
128 128 64 1
z c #f6f6f6
Z c #eeeeee
:''etc., palette using '''1''' character codes''
@ c #080808
. c #000000
............................................

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:

#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

Compatibilidad con GdkPixBuf

GdkPixbuf.Pixbuf.new_from_xpm (parte de la librería Gdk), no permite la línea

! XPM2

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

["48 4 2 1", "a c #ffffff", "b c #000000", 
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab",
"abaabaababaaabaabababaabaabaababaabaaababaabaaab"]

(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

Archivo gráfico con la leyenda Blarg

Los siguientes ejemplos comparan un archivo con la leyenda "Blarg" en formatos XBM, XPM y PGM.

Versión en XBM:

#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};

Versión en XPM:

/* XPM */
static char * blarg_xpm[] = {
"16 7 2 1",
"* c #000000",
". c #ffffff",
"**..*...........",
"*.*.*...........",
"**..*..**.**..**",
"*.*.*.*.*.*..*.*",
"**..*..**.*...**",
"...............*",
".............**."
}

Versión en XPM2:

! XPM2
16 7 2 1
* c #000000
. c #ffffff
**..*...........
*.*.*...........
**..*..**.**..**
*.*.*.*.*.*..*.*
**..*..**.*...**
...............*
.............**.

Versión en PGM:

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

Referencias

  1. LeHors, 1996, p. 7
  2. Daniel, Dardailler; Colas Nahaboo and Arnaud Le Hors. «The XPM Story». Archivado desde el original el 14 de noviembre de 2018. Consultado el 5 de abril de 2010. 
  3. Kenton Lee (Sept de 1998 .). «What is XPM ?». The Motif FAQ. comp.windows.x.motif. 137. Consultado el 5 de abril de 2010. 
  4. LeHors, 1996, p. 8

Enlaces externos