RGB

Bei den RGB-Pixelformaten handelt es sich um die wohl bekanntesten Pixel-Formate. Bei diesen folgt die Darstellung dem Farbmodell des Lichts, weswegen dieses Modell üblicherweise auch bei, bzw. auf Bildschirmen verwendet wird.

Veröffentlicht am 06.12.2015, aktualisiert am 25.03.2019

Bei den RGB-Pixelformaten handelt es sich um die wohl bekanntesten Pixel-Formate. Bei diesen folgt die Darstellung dem Farbmodell des Lichts, weswegen dieses Modell üblicherweise auch bei, bzw. auf Bildschirmen verwendet wird. Die Farbe wird dabei aus den RGB-Farbmodell, bestehend aus den Komponenten Rot, Grün und Blau, gebildet, diese stellen in diesem Modell also die Farbkanäle dar.

Dabei ist die Grundfarbe, also die allererste Farbe im Modell, schwarz. Erst durch das Hinzufügen von mindestens einer der 3 Farben entsteht eine andere Farbe daraus. Wenn alle 3 Farbkanäle ausbalanciert sind (also den gleichen Wert haben), ergibt sich ein Grauton unterschiedlicher Helligkeit, bis hin zu weiß.

Das RGB-Pixelformat nutzt daher die additive Farbmischung.

Durch die Kanäle ergeben sich beispielsweise folgende Pixelformate:

Pixelformat Rot-Kanal Grün-Kanal Blau-Kanal Resultierende Farbtiefe
RGB161616 / RGB48 16 Bit
0 - 65535
16 Bit
0 - 65535
16 Bit
0 - 65535
48 Bit
281.474.976.710.656 Farben
RGB121212 / RGB36 12 Bit
0 - 4095
12 Bit
0 - 4095
12 Bit
0 - 4095
36 Bit
68.719.476.736 Farben
RGB888 / RGB24 8 Bit
0 - 255
8 Bit
0 - 255
8 Bit
0 - 255
24 Bit
16.777.216 Farben
RGB565 5 Bit
0 - 31
6 Bit
0 - 63
5 Bit
0 - 31
16 Bit
65.536 Farben
RGB555 5 Bit
0 - 31
5 Bit
0 - 31
5 Bit
0 - 31
15 Bit
32.768 Farben
RGB444 4 Bit
0 - 15
4 Bit
0 - 15
4 Bit
0 - 15
12 Bit
4.096 Farben
RGB222 2 Bit
0 - 3
2 Bit
0 - 3
2 Bit
0 - 3
6 Bit
64 Farben
BGR844 4 Bit
0 - 15
4 Bit
0 - 15
8 Bit
0 - 255
16 Bit
65.536 Farben

Wie zu erkennen ist, wird bei Pixelformaten üblicherweise erst die Reihenfolge der Farbkanäle angegeben - und anschließend die Tiefe der Farbkanäle in Bits.

Auch oft zu sehen sind ARGB / RGBA / BGRA / ABGR-Formate. Bei dem A handelt es sich aber nicht um eine Farbe im eigentlichen Sinne:
Bei diesen ist ein Alpha-Kanal hinzugefügt, der keine eigene Farbe darstellt, sondern die Information darüber aufnimmt, wie Durchsichtigt die entsprechende Position gezeichnet werden soll.
Ein ARGB1555-Format enthält dementsprechend dabei eine 1-Bit Information über Transparenz, sowie je 5-Bit pro Farbkanal.

In der realen Welt findet man häufig die Formate RGB888 bzw ARGB8888, RGB565, RGB555 sowie ARGB1555.
Häufig erhält der Grün-Kanal dabei eine höhere Gewichtung, sofern sich Raum dafür anbietet, da das Auge auf diesem Farbkanal besser auflöst und so feinere Nuancen erkennen kann.

Zur Illustration, hier die 3 Mario-Farben in unterschiedlichen RGB-Formaten:

Farbe Pixelformat Rot Grün Blau Hexadezimaldarstellung
Rot RGB888 177
69.4%
52
20.3%
37
14.5%
B13425
RGB565 22
70.9%
13
20.6%
4
12.9%
160D04
RGB555 22
70.9%
6
19.3%
4
12.9%
160604
RGB444 10
66.6%
3
20.0%
2
13.3%
A32
Gelb RGB888 228
89.4%
158
61.9%
37
14.5%
E39D25
RGB565 28
90.3%
39
61.9%
4
12.9%
1C2704
RGB555 28
90.3%
19
61.2%
4
12.9%
1C1304
RGB444 13
86.6%
9
60.0%
2
13.3%
D92
Ocker RGB888 106
41.5%
107
41.9%
4
1.5%
6A6B04
RGB565 13
41.9%
26
41.2%
0
0.0%
0D1A00
RGB555 13
41.9%
13
41.9%
0
0.0%
0D0D00
RGB444 6
40.0%
6
40.0%
0
0.0%
660

Dem geneigten Beobachter mag auffallen:
HTML und CSS verwenden wahlweise RGB888 (24 Bit) oder RGB444 (12 Bit) in hexadezimaler Darstellung.

Die Prozent-Angaben (die sich durch farbwert / kanalumfang * 100 ergeben) zeigen dabei auch auf, wie Farbangaben in den einzelnen Farbtiefen umgerechnet werden können:

farbeZiel = round(farbeOriginal / kanalumfangOriginal * kanalumfangZiel)

Wobei der Farbumfang jeweils dem Wert (2Tiefe des Farbkanals - 1) entspricht. Es sei darauf hingewiesen, wenn es nicht offensichtlich ist:
Eine Farbe lässt sich ohne Qualitätsverlust in eine Farbtiefe umwandeln, die einem Vielfachen des ursprünglichen Farbkanals entspricht. Weicht man davon ab, treten zwangsläufig Informationsverluste auf.

Konkret: ein 4-Bit-Kanal kann problemlos in einen 8-Bit-Kanal umgewandelt werden. Wandelt man ihn in einen 6-Bit-Kanal um, treten mit gewisser Wahrscheinlichkeit Verluste auf, da man Annäherungen verwenden muss. Diese Verluste müssen allerdings nicht zwangsweise unmittelbar sichtbar sein. Würde man das Bild jedoch zurückkonvertieren, würde nicht mehr das exakt gleiche Bild dabei herauskommen.
Genauso treten Verluste auf, wenn man den 8-Bit-Kanal in einen 4-Bit-Kanal umwandelt - hier fallen diese allerdings mitunter schon deutlicher auf.

Durch die Rundung lässt sich der Qualitätsverlust mindern. Würde man den Wert flooren, sprich, die Nachkommastellen abschneiden / ignorieren - bzw. mit Ganzzahlen rechnen - wäre der Qualitätsverlust je nach Pixelformat drastisch:

Daher immer darauf achten:
Auch wenn es teuer ist, lohnt es sich durchaus, mit Nachkommastellen, also Fixed-Point / Floating-Point, bei der Umrechnung zu arbeiten. Da man in der Regel eher nicht in Echtzeit Farbkanäle umwandeln muss, sollte das ein vernachlässigbares Problem sein.

Üblicherweise werden die einzelnen Farbkanäle kombiniert abgespeichert.
Dies lässt sich wie folgt erreichen:

farbWert = (rot << gruenFarbtiefe << blauFarbtiefe) & (gruen << blauFarbtiefe) && blau

für eine RGB-Variante, bzw

farbWert = (blau << gruenFarbtiefe << rotFarbtiefe) & (gruen << blauFarbtiefe) && rot

für eine BGR-Variante, wobei die xxxFarbtiefe-Varianten jedenfalls der Kanaltiefe in Bits entsprechen.
<< bezeichnet einen Operator, der einen Datenwert um eine bestimmte Anzahl von Bits nach links verschiebt.

Hinweis:
Die Figur Super Mario ist in Charakter und Darstellung geistiges Eigentum der Firma Nintendo und weltweit in vielen Ländern entsprechend geschützt.
Die Grafik wurde zu illustrativen und edukativen Zwecken im Sinne von Fair Use verwendet.

Kommentare

Kommentar hinzufügen

Dein Kommentar wird möglicherweise nicht sofort dargestellt werden. Kommentare werden aus Spamschutzgründen moderiert.