Sodele, da habe ich doch mal einen kleinen süßen Record zusammengebaut, der nun einen Farbwert mit einem Alphakanal beherbergt.
Benutzt werden kann der wie TColor (durch überladene Operatoren) hat aber noch eine Zusatzfunktion (PaintColor), um etwas mit dem Alpha-Wert anzufangen.
Eine Demo ist im Anhang.
(Exe, kompletter Source)
Delphi-Quellcode:
unit insARGBColor;
interface
uses
Graphics;
type
TARGBColor =
record
R, G, B, A : Byte;
class operator implicit( ARGB : TARGBColor ) : TColor;
class operator implicit( Color : TColor ) : TARGBColor;
function PaintColor( Color : TColor ) : TColor;
end;
implementation
{ TARGBColor }
class operator TARGBColor.implicit( ARGB : TARGBColor ) : TColor;
begin
Result := ARGB.R
or ( ARGB.G
shl 8 )
or ( ARGB.B
shl 16 );
end;
class operator TARGBColor.implicit( Color : TColor ) : TARGBColor;
begin
Result.R := Byte( Color );
Result.G := Byte( Color
shr 8 );
Result.B := Byte( Color
shr 16 );
end;
function TARGBColor.PaintColor( Color : TColor ) : TColor;
var
Col, res : TARGBColor;
begin
Col := Color;
res.R := ( Self.R * Self.A + Col.R * ( 255 - Self.A ) )
div 255;
res.G := ( Self.G * Self.A + Col.G * ( 255 - Self.A ) )
div 255;
res.B := ( Self.B * Self.A + Col.B * ( 255 - Self.A ) )
div 255;
Result := res;
end;
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)