Indizierte Farben
# Indizierte Farben

In der Computergrafik bezeichnet man mit indizierten Farben eine Methode zur Speicherung einer Rastergrafik. Bei indizierten Farben enthält die Datenstruktur jedes Pixels nicht direkt die einzelnen Farbwerte, sondern nur einen Index auf einen Eintrag einer Farbtabelle oder Farbpalette, die die im Bild verwendeten Farben auflistet.

Bilder, die nur wenige unterschiedliche Farben enthalten, sparen durch die geringe Größe des Farbindex Speicherplatz. Insbesondere einfache Grafiken oder Diagramme lassen sich so platzsparend speichern.

Indizierte Farben werden sowohl bei diversen Grafikformaten verwendet als auch bei alten Grafikstandards, etwa bei EGA und VGA.

## Funktionsweise

In der Farbtabelle werden alle im Bild verwendeten Farben aufgelistet, wobei jeder Eintrag einen Farbwert enthält. Die Farbtabelle wird von den Pixeldaten getrennt gespeichert. Der Speicherplatz, den der Index eines Pixels benötigt, wird in Bit pro Pixel (bpp) angegeben und ist ein Maß für die Farbtiefe des Bildes. Sie begrenzt die maximale Anzahl der verwendbaren Tabelleneinträge; bei einem Bild mit durch $n$ bpp indizierten Farben ergibt sich eine maximale Farbtabellengröße von $2^{n}$ Einträgen.

In der Praxis werden nur maximal 8 bpp verwendet, entsprechend einer Tabellengröße von 256 Farben. Theoretisch sind auch Farbtabellen mit mehr als 8 bpp möglich. Allerdings nimmt die Speicherersparnis mit zunehmender Größe der Farbentabelle ab; ab einer bestimmten Größe wird der Speicherbedarf insgesamt sogar größer als mit direkt angegebenen Farben.

Die Anzahl der Tabelleneinträge ist unabhängig vom Format, mit dem die Farbwerte letztlich in den Tabelleneinträgen repräsentiert werden; für diese sind beliebige Farbräume denkbar. In der Praxis werden entweder 8-Bit-Graustufenwerte oder je 8 Bit für Rot, Grün und Blau (RGB) verwendet, eventuell zusätzlich noch ein Alpha-Wert zur Angabe der Transparenz. Gelegentlich wird mit dem Begriff „Farbtiefe“ auch der von einem Farbwert eingenommene Speicherplatz bezeichnet; diese Bedeutung ist von der Farbtiefe im Sinne des für einen Farbindex verwendeten Speicherplatzes zu unterscheiden.

Oft wird die Farbanzahl einer Rastergrafik künstlich auf 256 oder weniger Farben verringert, um vom geringeren Speicheraufwand der indizierten Farben zu profitieren. Diese Methode, bei der die für das Bild repräsentativsten Farben ermittelt werden müssen, nennt man Farbreduktion.

## Beispiel

Das obige Schema stellt die Funktionsweise der Farbtabelle am Beispiel eines 5 × 5 Pixel großen Bildes mit 2 bpp, entsprechend $2^2$ = 4 Tabelleneinträgen, dar. Jedes Pixel enthält einen Index auf die Farbtabelle, die den jeweiligen Farbwert definiert. Auf der rechten Seite ist das gleiche Bild ohne Farbtabelle zu sehen; die Farbwerte sind hier direkt in den Pixeln gespeichert.

Wenn man davon ausgeht, dass für dieses Bild eine Farbe durch drei RGB-Werte zu je 8 Bit = 24 Bit repräsentiert wird,

* so ergibt sich für das Bild ohne Farbtabelle (rechts) eine Größe der Bilddaten von (5 × 5) × 24 = 600 Bits.
* Beim Bild mit Farbtabelle (links) belegt letztere 4 × 24 = 96 Bits; die Größe der Bilddaten ergibt sich zu (5 × 5) × 2 = 50 Bits. Das gesamte Bild ist in diesem Fall also nur 96 + 50 = 146 Bits groß.

## Color Lookup Table

Als Color Lookup Table (CLUT, siehe auch Lookup-Tabelle) bezeichnet man den Teil der Grafik-Hardware, der die indizierten Farben des Framebuffers in normale Farbwerte umwandelt, um sie auf einem Bildschirm ausgeben zu können. Die CLUT ist somit eine mittels Hardware realisierte Farbtabelle. Bei den ersten Grafikkarten war die CLUT noch ROM-artig fest verdrahtet, heute handelt es sich dabei normalerweise um einen schnellen Speicher oder Registersatz in der Grafikhardware, der die aktuell verwendete Farbtabelle enthält.

Die meisten Grafikformate, die das Format einer gespeicherten Grafikdatei definieren, unterstützen verschiedene Farbtiefen, darunter sowohl solche ohne Palette als auch solche mit Palette. In letzteren gibt es dann einen eigenen Abschnitt für die Farbtabelle, der dann gelegentlich auch „(Color) Look-Up Table“ oder ähnlich genannt wird.

## Farbtabellenrotation

Da die aktuelle Farbtabelle einer Hardware-CLUT verändert werden kann, sind durch bewegte Farbverläufe sehr schnelle und einfache Grafikeffekte möglich (Farbtabellenrotation, Color Cycling). Dabei wird typischerweise ein Unterbereich der Farbpalette mit einer konstanten Wiederholrate zyklisch umbelegt, d. h. „durchgerollt“. Dadurch lassen sich insbesondere Effekte wie etwa bewegtes Wasser erzielen. Der Aufwand für den Prozessor ist dabei sehr gering, da er von einer zur nächsten Phase nur die Inhalte von wenigen Farbregistern in der Grafikhardware umbelegen muss und auf den viel größeren eigentlichen Grafikspeicher überhaupt nicht zuzugreifen braucht. Entsprechend war dieser Ansatz besonders in der Frühzeit der Heimcomputer verbreitet, als noch keine so große Rechenleistung zur Verfügung stand.

Die Farbtabellenrotation war bereits in SuperPaint, einem Mitte der 1970er Jahre entwickelten Malprogramm, möglich. Das Amiga-IFF-Dateiformat ist besonders geeignet für die Speicherung komplexer Farbtabellenrotations-Effekte innerhalb von Grafikdateien und Animationen. Die dynamisch wechselnden Palettenbereiche sowie die Zeitparameter sind in eigenen Daten-„Chunks“ (CCRT, CRNG oder DRNG) definiert. Diese Chunks unterstützen die asynchrone Rotation mehrerer Palettenbereiche in unterschiedlichen Geschwindigkeiten und Richtungen. Diverse Atari-Malprogramme wie NeoChrome erlauben Farbtabellenrotations-Effekte für einen bestimmten Palettenbereich. Die Startbildschirme von Windows 95 und 98 verwendeten ebenfalls Farbtabellenrotation. Hier war das Bild in einer Datei im BMP-Format abgelegt; ein Eintrag im Header bestimmte die Anzahl der zu rotierenden Paletteneinträge.

Auf heute üblichen Rechnern werden derartige Möglichkeiten aber kaum genutzt, da moderne Grafikkarten im Echtfarbenmodus arbeiten und schnell genug sind, die gleichen Effekte auch in dieser Darstellungsart zu erzielen.

