![]() |
RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder Code
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 -> ![]() 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
Delphi-Quellcode:
an die folgende Procedure übergeben:
Color2Lab(Form2.Canvas.Pixels[x,y],L2,a2,b2);
(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 :-D !! |
Re: RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder
Du müsstest wohl noch die RGB-Werte auf 1.0 normieren:
Delphi-Quellcode:
sR,sG,sB : Double; // 0.0 .. 1.0
begin //Color zu RGB sR:= GetRValue(Color) / 255.0; sG:= GetGValue(Color) / 255.0; sB:= GetBValue(Color) / 255.0; |
Re: RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder
Dankeschön für den Tipp, aber leider funktioniert es immer noch nicht die Werte aus dem XYZ System sind jetzt immer im Bereich von 0.xxx und die im L*A*B*-Bereich sind unverändert groß.
Danke trotzdem ich bin für jeden Hinweis, für jede Idee dankbar! |
Re: RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder
Delphi-Quellcode:
hier war, glaub ich, eine Klammer zuviel,
L := 116*power(Y/Yn,1/3)-16;
aber sonst ... :gruebel: ... sieht es eigentlich genauso aus, wie in dem Wikipedia-Artikel. |
Re: RGB -> XYZ -> LAB Farbraum (Rechenformel und-oder
himitsu hat schon den fehler bei L gefunden. jetzt scheinen alle funktionen richtig geschrieben zu sein.
also liegt das problem eher. ich würde mal tippen, dass dein getRvalue/getGvalue/getBvalue nicht richtig funktioniert. ich würde die funktion getcolor verwenden. diese liefert dir einen Tcolor wert nach dem schema $00FFEEDD dabei steht $00 für das höchstwertige byte Zitat:
DD ist dein wert für G EE ist dein wert für R versuchs mal damit. müsste eigentlich klappen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz