Wie speichert ein Computer Farben?

In erster Linie müssen wir diese Frage mal noch etwas präzisieren. Es gibt schliesslich nicht den Computer und ein Computer ist nur ein dummes, lebloses Gerät ohne Leben. Genauer müssten wir uns also fragen wie Software Farben speichert. Selbst das müssten wir jedoch auch noch etwas präzisieren. Wenn jede Software Farben anders speichern würde wäre das eine ziemliche Unordnung. Es gibt deshalb verschieden Standards (resp. Dateiformate), die bestimmen wie Farben gespeichert werden. In diesem Artikel schauen wir uns einfach mal an was es so für Optionen gibt um Farben zu speichern.

Ein Pixel ist ein Punkt in einem Bild. Jeder Pixel hat eine Farbe. Ein Bild das n-Pixel breit und m-Pixel hoch ist hat total \(n \cdot m\) Pixel. Brauchen wir pro Pixel vier Bytes so wäre ein 1024x768 Bild also \(1024 \cdot 768 \cdot 4 = 3145728 = 3\text{MiB}\) gross. Kann das stimmen? Schliesslich sind Photos von der Kamera nur so 1.5MiB gross. Was läft da? Nun, was wir eben berechnet haben ist die unkomprimierte Grösse - Bilder sind also relativ gross und haben deshalb eine eingebaute Kompression in aller Regel. Nicht alle Bildformate unterstützen eine Kompression aber die, die man so im Alltag benutzt benutzen alle Kompression.

Tipps fürs Binärsystem. Die Ziffer ganz rechts steht für; 1, die links davon 2, die links davon 4, die links davon 8, die links davon 16 und so weiter. Ist die Ziffer 1 so addiert man die Zahl dazu, ist die Ziffer 0 so geht man einfach weiter nach links resp. addiert 0. D.h. \(111_{b} = 1 + 2 + 4 = 7\), und \(101_{b} = 1 + 0 + 4 = 5\) oder \(1010_{b} = 0 + 2 + 0 + 8 = 10\).

Schwarz und Weiss

Beschränken wir uns auf Schwarz und Weiss dann haben wir lediglich zwei verschiedene Farben und deshalb brauchen wir eigentlich auch nur ein Bit pro Pixel. Wir können also acht Pixel in einem Byte speichern. Entsprechend gilt einfach \(1 = \text{weiss}\) und \(0 = \text{schwarz}\). Ein 1024x768 grosses Bild wäre also 96KiB gross.

0
1

Graustufen

Graustufen bedeutet, dass wir nicht nur Schwarz und Weiss haben sondern halt auch ein paar Stufen Grau dazwischen. Der alte Gameboy zum Beispiel hatte vier Farben (Graustufen). Schwarz, Dunkelgrau, Hellgrau und Weiss. Bei vier Graustufen benötigt man zwei Bits. Wie berechnet man das überhaupt? \(\text{Anzahl Bits} = \log_{2}(\text{Anzahl Zustände)}\). Ein Bit kann zwei Zustände einnehmen (1 oder 0). Zwei Bits können vier Zustände einnehmen (00, 01, 10 und 11). Drei Bits acht, vier Bits sechzehn und so weiter. D.h. n-Bits können \(2^{n}\) Zustände einnehmen. \(\log\) ist schlicht die Umkehrfunktion.

Bei 256 Graustufen benötigen wir ein Byte pro Pixel. Wir betrachten dabei dieses Byte als eine 8-bit Ganzzahl d.h. \(11111111_{b} = 255 = \text{weiss}\) und \(00000000_{b} = 0 = \text{schwarz}\). Sowie \(10000000_{b} = 128 = \text{genau die Mitte zwischen Weiss und Schwarz}\).

00
01
10
11

Farbpalette

Bei einer Farbpalette gibt es eine vordefinierte Reihe an Farben, die verwendet werden können. Das hat den Vorteil, dass man nicht auf Graustufen begrenzt ist aber trotzdem Farben bei geringem Speicherverbrauch benutzen kann. Die Farben können beliebig sein bzw. hängen von der darunterliegenden Hardware ab. Entweder gibt's eine fixe Hardware-Farbpalette oder eine konfigurierbare Hardware-Palette. Obwohl man bspw. bei einer Palette auf 16 Farben limitiert war so kannte die Hardware darunter im Prinzip viel mehr Farben aber um Speicherplatz zu sparen musste man sich quasi auf eine Auswahl an Farben beschränken, die man benutzen wollte. Dies, weil Arbeitsspeicher früher extrem begrenzt war. Kann die Hardware bspw. 65536 Farben anzeigen würde man pro Pixel zwei Bytes benötigen. Definiert man eine Farbpalette aus 16 Farben aus diesen 32 Tausend Farben so benönigt man nur noch 0.5 Bytes pro Pixel. Das spart Platz.

0000
0001
0010
0011
0100
0101
0110
....

RGB

Computerbildschirme benutzen den RGB-Farbraum. Rot und Grün und Blau zusammen ergeben Weiss. Rot und Grün ergibt bspw. Gelb. Bei 8bit RGB werden 3 bits für Rot, 3 bits für Grün und 2 bits für Blau benutzt. Dadurch ergeben sich 256 verschiedene Farben bei einem Byte pro Pixel. In der heutigen Zeit wird 24bit RGB benutzt, d.h. 8 bits pro Farbkanal (Rot, Grün und Blau). Pro Pixel werden dadurch also 3 Bytes benönigt. Dadurch ergeben sich \(2^{24} = 16777216\) verschiedene Farben.

00000000 00000000 00000000
11111111 11111111 11111111
11111111 11111111 00000000
00000000 11111111 00000000
00000000 00000000 11111111
10000000 00000000 10000000