- Xpm
-
X PixMap (XPM) ist ein ASCII-Text-Format für die Darstellung von Rastergrafiken, hauptsächlich Icons.
Die erste Version von XPM stammt aus dem Jahre 1989 und wurde von Daniel Dardailler und Colas Nahaboo (auch Autor des Window-Managers GWM für das X Window System) entwickelt, die beide am französischen INRIA arbeiteten. Später wurde das Format von Arnaud Le Hors erweitert. Die Intention hinter dem Format ist es, farbige Icons am Computer darzustellen. Die Struktur des Datenformats ist einfach und an das ältere monochrome XBM-Format angelehnt. Die Grafiken bestehen aus reinen Textdateien; sie können mit einem einfachen Texteditor bearbeitet werden und können, ebenso wie XBM-Dateien, direkt in C-Quellcode eingebunden werden.
Inhaltsverzeichnis
Beispiel
Beispiel mit einem transparenten Hintergrund, einem roten Ball und einem blauen darüber liegenden Querbalken.
/* XPM */ static char * example_xpm[] = { "24 20 3 1", " c None", ". c #0000FF", "+ c #FF0000", " ", " .. ", " .... ", " ......++++++++ ", " .........+++++++ ", " ..........+++++++ ", " ............++++++ ", " .............++++++ ", " ..............++++ ", " +.............+++ ", " ++.............++ ", " +++.............+ ", " +++++............. ", " ++++++.............. ", " ++++++++............ ", " +++++++++........... ", " +++++++++......... ", " ++++++++++....... ", " ++++++++++..... ", " +++++++++ ... "};
Formatbeschreibung
Das Datenformat ist in [1] beschrieben. Danach besteht eine XPM-Datei aus sieben Teilen:
- Kopfzeile (engl. „Header line")
- Deklarationszeile (engl. „Declaration and Beginning of Assignment line")
- Werte (engl. „Values")
- Farben (engl. „Colors")
- Pixel (engl. „Pixels")
- Erweiterungen (engl. „Extensions")
- Ende (engl. „End of Assignment")
Dateikopf
Die Kopfzeile besteht aus einem C-Kommentar
/* XPM */
.Die nächste Zeile ist die sogenannte Deklarationszeile, welche eine Variablendeklaration in C darstellt. Der Variablenname kann dabei beliebig sein, er muss ein gültiger C-Bezeichner sein. Normalerweise wird hierfür der Name der Bilddatei verwendet:
static char* bildname[] = {
Dateirumpf
Die folgenden Zeilen bestehen jeweils aus C-Zeichenkettenkonstanten. Dies bedeutet, ihr Inhalt wird in doppelte ASCII-Anführungszeichen eingeschlossen. Damit die XPM-Datei gültiger C-Quelltext ist, werden die Zeichenketten durch Kommata voneinander getrennt.
Werte-Zeile
Die Werte-Zeile enthält vier bzw. sechs Dezimalzahlen mit folgenden Bedeutungen:
- Breite des Bildes (in Pixel)
- Höhe des Bildes (in Pixel)
- Anzahl der Farben im Bild
- Anzahl der Zeichen pro Pixelwert
- (X-Position des „Hotspots")
- (Y-Position des „Hotspots")
Die letzten beiden Werte geben die Position eines so genannten „Hotspots" an. Dies ist etwa bei Mauscursorn der Punkt, auf den der Mauspfeil „zeigt". Bei normalen Bildern wird dieser Wert nicht benötigt und kann entfallen.
Farbdefinitionen
Anschließend folgen mehrere Zeilen, die jeweils eine Farbe im Bild definieren. Die Anzahl dieser Farbdefinitionen geht aus dem dritten Wert der Wertezeile hervor.
Jede Farbdefinition besteht aus einem Zeichencode. Die Länge des Zeichencodes geht aus dem vierten Wert der Wertezeile hervor. Nach einem Leerzeichen folgen eine oder mehrere Farbdefinitionen, die dem Zeichencode eine Farbe zuordnen. Resultierend aus dem ursprünglichen Verwendungszweck von XPM als Dateiformat für Icons, können für verschiedene Darstellungsarten unterschiedliche Farbdefinitionen angegeben werden. Dies hat den Vorteil, dass die Darstellung für verschiedene Farbtiefen optimiert werden kann und nicht aus einer farbigen Darstellung eine Schwarzweißdarstellung errechnet zu werden braucht.
Folgende Darstellungsarten werden unterstützt:
- c : Farbig
- g4 : Vier Graustufen
- g : Mehr als vier Graustufen
- m : Monochrom (Schwarzweiß)
- s : Symbolisch (damit kann eine Farbe einen symbolischen Wert bekommen, etwa „Hintergrund" oder „Vordergrund". Die Auswertung dieser Symbolinformationen ist abhängig vom verwendeten Programm)
Auf diese Angabe folgt dann die eigentliche Farbdefinition. Diese kann aus einem symbolischen Namen bestehen (z. B. „white", „red"), eine Farbe im RGB-Farbraum als hexadezimale Farbdefinition (#RRGGBB) oder im HSV-Farbraum (%HHSSVV). Soll eine Farbe als „transparent" gekennzeichnet sein, so ist die Farbe auf „
None
" zu setzen.Beispiel:
"A c red m black g gray50 s foreground" "B c yellow m white g gray80 s background" "# c black m black g gray10 s border"
Bilddaten
Nach den Farbdefinitionen folgen die Bilddaten. Diese sind zeilenweise von oben nach unten, in einer Zeile von links nach rechts abgespeichert. Jede Bildzeile wird in einer Textzeile in der XPM-Datei abgespeichert. Pro Bildpunkt wird - abhängig vom oben angegeben Wert - ein oder mehrere Zeichen benutzt.
Dateiende
Die Spezifikation sieht vor, dass den Bilddaten noch weitere Daten folgen können. Da bisher aber noch keine solchen Erweiterungen definiert worden sind, folgt auf die Bilddaten nur eine Endezeile, welche die C-Deklaration mit der Zeichenfolge
};
abschließt.Praktische Einschränkungen
Da die meisten Programme, die XPM-Dateien verarbeiten können, keine vollständigen C-Parser sind, sollten Programme, die XPM-Dateien erzeugen, nicht von dieser Spezifikation abweichen, insbesondere keine andere Formatierung des „Quellcodes" vornehmen und keine C-Kommentare (außer der obligatorischen Kopfzeile) oder ähnliches hinzufügen.
Auch verstehen viele Programme die komplexen Farbdefinitionen nicht, sondern beherrschen nur eine Darstellungsart oder ignorieren diese Angabe völlig und werten nur den Farbcode aus, und verstehen außerdem nur hexadezimale RGB-Farbcodes und „
None
" für die transparente Farbe.Die Zeichencodes, mit denen eine Farbe kodiert wird, können im Prinzip aus beliebigen ASCII-Zeichen bestehen. Es empfiehlt sich jedoch, nur Buchstaben, Ziffern und einige „sichere" Sonderzeichen zu nehmen, womit sich etwa 70 bis 80 verschiedene Farben darstellen lassen. Enthält ein Bild mehr Farben, muss auf Zeichencodes, die aus zwei Zeichen bestehen, ausgewichen werden. Obwohl die XPM-Spezifikation keine Maximallänge der Zeichencodes vorsieht, sollte man maximal aus zwei Zeichen bestehende Zeichencodes verwenden, was bis zu 80·80=6400 Farben zulässt, da einige Programme die XPM-Datei sonst nicht lesen können. Einige Programme weigern sich, mehr als 256 Farbdefinitionen zu lesen oder erzeugen beim Speichern eine Farbtabelle mit maximal 256 Farben.
Quellen
Wikimedia Foundation.