AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TColor - Zusammenfügen der Farben

Ein Thema von Muellermilchtrinker · begonnen am 15. Mai 2011 · letzter Beitrag vom 16. Mai 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: TColor - Zusammenfügen der Farben

  Alt 16. Mai 2011, 18:55
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.
targbcolorgui.png
(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.
Angehängte Dateien
Dateityp: zip TARGBColor.zip (451,9 KB, 10x aufgerufen)
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)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

AW: TColor - Zusammenfügen der Farben

  Alt 16. Mai 2011, 19:14
Ok, das sieht gut aus. Aber weil ich auch gerade nebenher gebastelt hab (natürlich zeitlich total versagt ) poste ich auch mein Ergebnis, dass Deinen angebotenen Funktionsrumpf als Vorlage hatte:
Delphi-Quellcode:
type
  TARGB = packed record
    A,R,G,B : Byte;
  end;

function MixColor(ARGB : TARGB; Color : TColor): TColor;
var
  R, G, B : Byte;
begin
  R := Color and $FF;
  G := (Color shr 8) and $FF;
  B := (Color shr 16) and $FF;
  R := ((ARGB.R * ARGB.A) + (R * ($FF - ARGB.A))) div $FF;
  G := ((ARGB.G * ARGB.A) + (G * ($FF - ARGB.A))) div $FF;
  B := ((ARGB.B * ARGB.A) + (B * ($FF - ARGB.A))) div $FF;
  Result := R + (G shl 8) + (B shl 16);
end;
Zumindest bei der Berechnung/Mixen scheint es richtig (war da garnicht so sicher)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz