Hallo AW
1.
du schreibst:
Delphi-Quellcode:
if ((Alpha = 0) and (pBits[3] = 0)) then
pBits[3] := 0
else
if (pBits[3] = 0) then
pBits[3] := 255;
Etwas vereinfacht geschrieben:
if (a=0) and (p=0) then p := 0 else if (p=0) then p:= 255;
Dies kannst du vereinfachen:
if (p=0) then if (a>0) then p := 255;
D.h. du musst deine function Rgb2Alpha(colrRGB: Colorref): Byte; nur genau dann aufrufen, wenn p=0 ist.
2.
Deine Funktion Rgb2Alpha berechnet in der Tat die Luminanz eines Pixels.
https://de.wikipedia.org/wiki/Luminanz
Da du nur daran interessiert bist, ob Rgb2Alpha 0 zurück liefert oder nicht kannst du deine Funktion Rgb2Alpha ganz wesentlich vereinfachen.
3.
Ich empfehle beim Umsetzen von Formeln wie s = a + b + c nach Delphi die Funktion round - wegen der speziellen Art zu runden - nicht zu verwenden. Und wenn's unbedingt sein muss dann so:
s = round( a + b + c ) und nicht s = round(a) + round(b) + round(c). Im vorliegenden Fall (Berechnung Luminanz) spielt es zwar keine Rolle. Wenn aber wenn a = 12.5, b = 10.5, c = 2.5 dann ist s = 25.5.
s = round( 25.5 ) = 26. Hingegen: s = round(12.5) + round(10.5) + round(2.5) = 24.
Gruss
M