Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Multimedia / RGB

VB-Farbenlehre: RGB, Komplement, Luminanz, ...

Historie
05.05.2001Korrektur: Gelb ist eine additive Mischung aus Rot und Grün (Hinweis von Marco Kraft)
12.04.2001Gewichtete Helligkeit
24.01.2001Komplementärfarbe und Helligkeit einer Farbe bestimmen
25.12.2000Erste Version: Farb-Codierung in VB/Windows; Bestimmung der Rot-, Grün- und Blau-Anteile

Einleitung

VB kennt die Funktion RGB, um eine Mischfarbe (durch Angabe der Rot- Grün- und Blau-Anteile im Bereich von 0 bis 255) zu erstellen. So kann z.B. mit

Farbe = RGB(255, 255, 0)

die Farbe Gelb erzeugt werden (additive Mischung aus Rot und Grün).

Farb-Anteile bestimmen

Möchte man umgekehrt aus einer Mischfarbe die Grundfarben erhalten, so läßt VB einen im Stich... Es ist also mal wieder Handarbeit angesagt. Die Lösung ist aber gar nicht so schwer; Man muss nur wissen, dass Farbwerte intern als Long dargestellt werden (im Format &HBBGGRR), es genügen nämlich folgende Anweisungen:

Rot  =  Farbe And vbRed
Grün = (Farbe And vbGreen) \ &h100
Blau = (Farbe And vbBlue)  \ &h10000

Komplementärfarbe bestimmen

Im Allgmeinen versteht man unter der Komplementärfarbe einer gegebenen Farbe c1 genau diejenige Farbe c2, so dass die Zusammenmischung von c1 und c2 gerade Weiß ergibt. Anders ausgedrückt: Helle Farbanteile werden dunkler, dunkle Farbanteile werden heller. Aufgrund der oben dargelegten Farb-Codierung kann dies durch folgende Formel berechnet werden:

KomplFarbe = Farbe Xor &HFFFFFF

Hoher Kontrast durch Helligkeits-Unterschiede

Problem: Es soll eine Hintergrund-Farbe passend zu einer gegebenen Vordergrund-Farbe gesetzt werden (oder umgekehrt), so dass die Schrift gut lesbar ist. Die Komplementärfarbe ist dafür nicht unbedingt gut geeignet, da z.B. die Komplementärfarbe von Grau nämlich gerade Grau ist, d.h. der Kontrast wäre null! Besser ist da eine fixe Farbwahl in Abhängigkeit von der Helligkeit, z.B.:

'Helligkeit der Vordergrundfarbe bestimmen:
Helligkeit = (Rot + Grün + Blau) \ 3

'Hintergrundfarbe anpassen:
If Helligkeit > 127 Then
  HintergrundFarbe = vbBlack
Else
  HintergrundFarbe = vbWhite
End If

Gewichtete Helligkeit (Luminanz)

Oben wurde die Helligkeit einer Farbe als Mittelwert der drei Grundfarben bestimmt. Dies ist zwar mathematisch korrekt, aber tatsächlich sieht das menschliche Auge nicht über das ganze Licht-Spektrum gleichmäßig gut. (Zum Beispiel ist Grün viel wichtiger für die Helligkeits-Beurteilung als Blau.)

Möchte man daher diese "menschliche Unzulänglichkeit" smile berücksichtigen, müssen die Farbanteile entsprechend (prozentual zur typischen Wahrnehmung) gewichtet werden:

Helligkeit = 0.3 * Rot + 0.59 * Grün + 0.11 * Blau

Die drei Grundfarben sowie das Mittelwert-Grau sehen übrigens als gewichteter Helligkeitswert folgendermaßen aus: Rot Grün Blau Grau. Es sind also tatsächlich relevante Unterschiede zu erkennen.

HTML-Codes

Übrigens: Eine "RGB-Funktion" zur Erzeugung von HTML-Farbwerten stelle ich auf meinen ASP-Seiten vor.

© Jost Schwider, 25.12.2000-05.05.2001 - http://vb-tec.de/rgb.htm