maettig.com

Thiemos Archiv

Icons in Echtfarben benötigen weniger Speicherplatz als solche mit nur 256 Palettenfarben (zumindest gilt das für das Format 16 × 16, siehe unten). Das habe ich verwundert festgestellt, als ich mir ein paar kleine, angepasste Opera-Icons basteln wollte. Warum ist das so?

Die kleinen Icons im Startmenü, der Schnellstartleiste, Favoriten-Icons etc. haben eine Größe von 16 × 16 und somit eine Fläche von 256 Pixeln. In Echtfarben belegt jeder Bildpunkt 24 Bit, das sind 3 Byte. Hinzu kommt der Alphakanal, der die Transparenzinformationen beinhaltet und noch einmal 8 Bit, also 1 Byte je Bildpunkt belegt. Zusammen sind das 16 * 16 * 32 Bit = 1024 Byte. Hinzu kommen ein paar duzend Byte für den Dateikopf, den ich hier aber außer Acht lassen möchte.

Palettenbilder mit einer Farbtiefe von 8 Bit benötigen nur 1 Byte je Bildpunkt. Allerdings wird dieser Vorteil wieder aufgehoben, da für jede der 256 möglichen Farben ein Paletteneintrag von 4 Byte benötigt wird: Je ein Byte für den Blau-, Grün- und Rotanteil sowie ein viertes, wohl aus historischen Gründen vorhandenes, jedoch völlig ungenutztes reserviertes Byte. Zusammen sind das 16 * 16 + 256 * 4 = 1280 Byte, rund 20% mehr als beim äquivalenten 32-Bit-Icon.

Nun könnte man glauben, dass sich dieses vierte Byte für Transparenzinformationen nutzen ließe. Leider wird diese Interpretation des Dateiformats nicht unterstützt. Statt dessen wird für die Transparenz eine sogenannte AND-Maske verwendet, die noch einmal 32 Bit (aufgerundet) * 16 Zeilen * (1 / 8) = 64 Byte belegt. Dieser zusätzliche Speicher fällt kaum ins Gewicht, erlaubt aber eben nur zwei Zustände: 100% Deckkraft oder gar keine.

Zum Vergleich: Als 16-farbiges Bild belegt jedes Pixel nur 4 statt 8 Bit. Außerdem werden natürlich nur 16 Palettenfarben benötigt. Das macht zusammen 16 * 16 * (4 / 8) + 16 * 4 = 192 Byte.

Betrachtet man größere Icons, zum Beispiel in der Standardgröße 32 × 32 Pixel, sieht das alles natürlich ganz anders aus. Dann belegt ein Echtfarben-Icon mit 32 * 32 * 4 = 4096 Byte bereits doppelt so viel wie ein Palettenbild mit 32 * 32 + 256 * 4 = 2048 Byte.

Fasst man übrigens alle relavanten Icon-Größen und Farbtiefen in einer Datei zusammen (16, 32 und 48 Pixel sowie 4, 8 und 32 Bit), kommt man bereits auf sagenhafte 25 KiB. Aber das ist Stoff für einen anderen Artikel.

<quote>"sowie ein viertes, wohl aus historischen Gründen vorhandenes, jedoch völlig ungenutztes reserviertes Byte."</quote>
Das vierte Byte dient wohl eher als Füllbyte und wurde nur nie für Standarderweiterungen berücksichtigt. Als Füllbyte ist es aber ziemlich sinnvoll, da damit jede Farbe genau vier Byte belegt, als Folge dessen kann man die Adresse des Eintrags in der Farbtabelle schnell berechnen. Das Auslesen des Farbwertes erfolgt nun mit zwei 16-Bit- oder einem 32-Bit-Zugriffen sehr schnell, man muß nicht Byteweise lesen (oder gar aufwändige Verschiebeoperationen durchführen). Da die Icons meist direkt von Windows benötigt werden und der Farbwert daher einfach nur weiter gegeben wird, entfällt auch das Argument "ich benötige aber die drei Einzelkomponenten" für die meisten Fälle.
René M

Kommentare zu diesem Beitrag können per E-Mail an den Autor gesandt werden.

[ ← Zurück zur Übersicht ]

Impressum & Datenschutz