prev up inhalt next


9.12 Color Table (Farbtabelle)

In einem Digitalrechner erwartet der Video-Controller die Farbinformation als Byte-Tripel. Aus Platzgründen können nicht immer für jedes Bildschirmpixel 3 Bytes gespeichert werden. Statt dessen speichert man pro Pixel einen Index, bestehend aus p Bits, mit dem man ein RGB -Byte-Tripel aus der Color Table referieren kann.

Beispiel:
p = 2 , d.h. 22 = 4 Farben gleichzeitig darstellbar.
Index R G B  
0 255 0 0 Rot
1 0 255 0 Grün
2 0 0 255 Blau
3 255 255 0 Gelb

Die Color Table kann verwendet werden, um mehrere Bilder dynamisch zu überlagern und wieder zu trennen, ohne die Bilder neu zu zeichnen.

Beispiel:
In ein farbiges Bild mit den 8 Farben Schwarz, Grau, Rot, Gelb, Grün, Cyan, Blau, Magenta soll eine Grafik, bestehend aus weißen Linien, ein- und ausgeblendet werden. Pro Pixel seien 4 Bits als Index in der Color Table vorgesehen: Das vorderste Bit beschreibt die weiße Grafik, die hinteren 3 Bits beschreiben die Farbe.
Index R G B  
0000 255 255 255  
0001 255 255 255  
0010 . . .  
0011 . . .  
0100 . . .  
0101 . . .  
0110 . . .  
0111 255 255 255  
1000 0 0 0 Schwarz
1001 150 150 150 Grau
1010 255 0 0 Rot
1011 255 255 0 Gelb
1100 0 255 0 Grün
1101 0 255 255 Cyan
1110 0 0 255 Blau
1111 255 0 255 Magenta
         

Offenbar werden alle Pixel mit vorderstem Bit = 0 weiß gezeichnet, alle Pixel mit vorderstem Bit = 1 erhalten die zugewiesene Farbe. Kopiert man nun die untere Hälfte der Color Table in die obere Hälfte, so verschwindet die weiße Grafik. Setzt man die obere Hälfte der Color Table auf Weiß, erscheint die Grafik wieder. Der Aufwand hängt nur von der Größe der Farbtabelle ab, nicht von der Größe der Bilder.
Die Color Table kann auch zur Animation verwendet werden.

Beispiel:
Ein (beliebig komplexes) Objekt der Farbe Grün soll sich zyklisch über 15 disjunkte Positionen bewegen. Beschreibe die Szene wie folgt:
Alle Pixel des Objekts in Lage i erhalten den Index i .
Alle Pixel des Hintergrunds erhalten den Index 15 .
Die Color Table ist für alle Einträge mit der Hintergrundfarbe geladen. Das Objekt taucht bei Position i auf durch color_table[i] := Objektfarbe. Es verschwindet von Position i durch color_table[i] := Hintergrundfarbe.

Bei sich überlagernden Objekten wird für jede Position eine Bit-Plane benötigt: Alle Pixel des Objekts in Lage i setzen das i -te Bit in ihrem Index auf 1 . Das Objekt wird bei Position i sichtbar, indem für Indizes mit i -tem Bit = 1 die Objektfarbe gesetzt wird.

Die Anzahl der Bit-Planes entspricht der Anzahl der Bits im Index.

Darstellung eines True-Color-Bildes auf einem 8-Bit-Farbschirm

Es wird eine Farbtabelle initialisiert, die einem 6 × 6 × 6 RGB-Würfel entspricht. D.h. auf insgesamt 216 Einträge verteilt befindet sich das Farbspektrum mit je 6 verschiedenen Rot-, Grün- und Blau-Abstufungen. Jedem RGB-Tripel des True-Color-Bildes wird der Index des nächstgelegenen Farbeintrags zugeordnet. Hierzu wird der Bereich 0...255 in 6 Intervalle partitioniert, denen ein quantisierter Wert zugeordnet ist:

x 0 ... 25 26 ... 76 77 ... 127 128 ... 178 179 ... 229 230 ... 255
q(x) 0 51 102 153 204 255




12 typische Eintrage einer Farbtabelle fur einen Bildschirm mit 4 Bit Farbtiefe

Hi-Color-Modus

Beim Hi-Color-Modus werden die Rot-, Grün-, Blauanteile eines Pixels durch den Grafikkartentreiber auf 5 + 6 + 5 = 16 Bit gerundet, d.h., die letzten 3 bzw. 2 Bit werden abgeschnitten. Der resultierende 2 Byte lange Index wird im Bildspeicher abgelegt. Beim Auslesen läßt sich daraus unmittelbar ein Spannungstripel erzeugen, eine Farbtabelle wird nicht benötigt. Es sind also 216 = 65536 Farben gleichzeitig darstellbar.

Beim Einlesen eines Palettenbildes wird jedem Bildpunkt der 2-Byte Index zugeordnet, der sich nach Rundung des referierten Farbtabelleneintrags ergibt. Danach wird die Farbtabelle nicht mehr benötigt.


prev up inhalt next