Hey Leute ich suche jetzt schon den ganzen Tag im Netz nach einer Formel zur umrechnung vom
RGB- ins XYZ-
und schließlich ins L*A*B*-Farbsystem!
Kennt jemand eine Formel oder ein Codeschnipsel, in der die genannten Umrechnungen sind?
Photoshop kann das auch also muss es möglich sein^^... Ich habe auch schon ein paar
Quelltexte durchgeschaut, aber nix brauchbares (bzw. funktionierendes) gefunden!
Und die Formeln aus dem Wiki ->
http://de.wikipedia.org/wiki/Lab-Farbraum , habe ich auch schon versucht anzuwenden ... aber es kommen zum Schluss Pseudowerte heraus... L ist dann auf einmal 129 obwohl L in % angegeben wird... und nur bis 100 geht...
a ist 199283E10 oder ähnliches...
hier mein Code damit ihr meine Anfänge nachvollziehen könnt (Die Formel ist die von Wikipedia):
die Farbe hole ich mir durch eine MouseUp procedure indem ich einen Pixel im Bild (was direkt aufs Form2 gezeichnet ist) anklicke dann wird die Farbe mit
Color2Lab(Form2.Canvas.Pixels[x,y],L2,a2,b2);
an die folgende Procedure übergeben:
(die
RGB Werte stimmen! Ich habs gecheckt.)
Delphi-Quellcode:
procedure Color2Lab(Color: TColor;
var L,a,b: Single);
var
x,y,z : double;
Yn,Xn,Zn : double;
sR,sG,sB : Byte;
begin
//Color zu RGB
sR:= GetRValue(Color);
sG:= GetGValue(Color);
sB:= GetBValue(Color);
//Erst ins XYZ System
X := 0.4124564*sR + 0.3575761*sG + 0.1804375*sB;
Y := 0.2126729*sR + 0.7151522*sG + 0.0721750*sB;
Z := 0.0193339*sR + 0.1191920*sG + 0.9503041*sB;
//Dann XYZ Koords ins LABsystem
//CONST
Yn := 1;
Xn := x/y;
Zn := z/y;
//
L := 116*(power(Y/Yn,1/3)-16);
a := 500*((power(x/xn,1/3)-power(y/yn,1/3)));
b := 200*((power(y/yn,1/3)-power(z/zn,1/3)));
end;
Bitte findet meinen Fehler sonst könnt ihr mich einweisen
!!