prev up inhalt next


9.11 Color Table (Farbtabelle)

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

Beispiel:
n = 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.


prev up inhalt next