Hallo AW,
doch noch rasch:
Apro hat schon Recht; deine Funktion berechnet den Luminanz Wert für die meisten der 256^3 möglichen
RGB Werte nicht korrekt.
Sehr einfach kannst du es testen, indem du mit deiner Funktion die Luminanz-Werte von
RGB(grau,grau,grau) für grau=0 bis 255 berechnest.
Welche Werte sollte deine Funktion liefern?
In
E'Y = 0,299 E'R + 0,587 E'G + 0,114 E'B
eingesetzt ergibt sich
Y(grau) = 0,299*grau + 0,587*grau + 0,114*grau = grau = id
Deine Funktion liefert jedoch meistens andere Werte (weil du nicht wie Apro dir vorschlägt das jeweilige Farbbyte mittels "and $ff" separierst):
Delphi-Quellcode:
procedure TForm71.Button1Click(Sender: TObject);
var w, grau : byte;
s :
string;
begin
s := '
';
for grau := 0
to 255
do
begin
w := Rgb2Alpha2(
RGB( grau, grau, grau ) );
s := s + w.ToString + '
, ';
end;
showmessage( s );
end;