Einzelnen Beitrag anzeigen

Erebos

Registriert seit: 3. Jan 2010
12 Beiträge
 
#1

RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder Code

  Alt 25. Jan 2010, 19:09
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 !!
  Mit Zitat antworten Zitat