CIE -> RGB
Hi Wolfgang
))
Jede Farbe hat ihr eigenes Frequenzspektrum. Normalerweise wird dieses als Power-Spektrum P(lamda) in Abhängigkeit von der Wellenlänge lambda beschrieben. Schon 1931 beobachtete man, dass man ein solches Spektrum aus drei Funktionen x(lambda), y(lambda) und z(lambda) zusammensetzen kann. Die Funktion y(lambda) hat dabei sogar eine reale Bedeutung, sie beschreibt die Lichtempfindlichkeit unserer Augen in Abhängigkeit von der Wellenlänge (sieht aus wie eine Glockenkurve mit Zentrum bei grün). Nunja, wichtig ist eigentlich nur, dass man jede Farbe durch ein Zahlen-Tripel (X,Y,Z) beschreiben kann. Es gibt an, wie stark die einzelnen Funktionen x(lambda), y(lambda) und z(lambda) zu dem Power-Spektrum einer Farbe beitragen! Diese Zahlen-Tripel wurden bereits 1931 für jede Wellenlänge bestimmt und 1974 nochmal mit moderneren Mitteln nachgemessen. Sie heißen CIE-Koeffizienten. Es gibt ganze Tabellenwerke dafür. Unter anderem auch im Internet:
http://www.research.microsoft.com/~hollasch/cgindex/…
Das Schöne ist nun, dass man diese bekannten CIE-Werte in RGB-Werte umrechnen kann. Es ist einfach eine Matrix-Multiplikation:
R +3.240479 -1.537150 -0.498535 X
G = -0.969256 +1.875992 +0.041556 \* Y
B +0.055648 -0.204043 +1.057311 Z
Gültige Resultate für RGB liegen zwischen 0 und 1. Es kann sein, dass negative Werte oder Werte größer als 1 herauskommen. Das bedeutet nur, dass diese Farbe nicht mit RGB-Monitoren dargestellt werden kann, obwohl unser Auge sie sehen kann! Hier musst du dann entsprechend „abschneiden“. Liegen die Werte allerdings zwischen 0 und 1, musst du sie auf den Bereich [0-255,0-255,0-255] hochskalieren (bei 24 bzw. 32 Bit Farbtiefe) bzw. auf [0-32,0-64,0-32] (bei 16 Bit, grün hat ein Bit mehr, weil unser Auge besonders empfindlich darauf reagiert).
Also, alles was du brauchst, ist eine detailierte CIE-Tabelle.
cu Stefan.