Thema: Delphi RGB zu Alpha

Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
737 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: RGB zu Alpha

  Alt 20. Aug 2018, 19:04
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
Michael Gasser
  Mit Zitat antworten Zitat