Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TColor gewichtet mischen (https://www.delphipraxis.net/82933-tcolor-gewichtet-mischen.html)

ulrich.b 22. Dez 2006 12:38


TColor gewichtet mischen
 
Hallo!

Ich suche nach einer Funktion, die GEWICHTET zwei TColor Werte mischt.
Ich habe eine Funktion selbst gestrickt, die die Farben gewichtet addiert. Was haltet ihr davon? Die Funktion arbeitet nämlich nicht immer so wie ich es erwarte (die Zeilfarbe)....

Verbesserungsvorschäge????

Delphi-Quellcode:
type
  TColorRec = packed record
    case Integer of
      0: (Value: Longint);
      1: (Red, Green, Blue: Byte);
      2: (R, G, B, Flag: Byte);
  end;

// ....

function ColorAdd(C1: TColor; C2: TColor; WC1: Byte): TColor;
var
  Color1Rec: TColorRec;
  Color2Rec: TColorRec;

begin
  Color1Rec.Value := ColorToRGB(C1);
  Color2Rec.Value := ColorToRGB(C2);

  Result := 0;

  TColorRec(Result).R := EnsureRange((Color1Rec.R*WC1 + Color2Rec.R*($FF-WC1)) div $FF, 0, $FF);
  TColorRec(Result).G := EnsureRange((Color1Rec.G*WC1 + Color2Rec.G*($FF-WC1)) div $FF, 0, $FF);
  TColorRec(Result).B := EnsureRange((Color1Rec.B*WC1 + Color2Rec.B*($FF-WC1)) div $FF, 0, $FF);
end;

alzaimar 22. Dez 2006 13:00

Re: TColor gewichtet mischen
 
Also ich habe das so gelöst:
Delphi-Quellcode:
Function MergeColors (C0,C1 : TColor; I,N : Integer) : TColor;
Begin
  If N=1 Then
    Result := c0
  Else
    Result := RGB (
         (GetRValue(c1)*I + GetRValue(c0)*(N-I)) div n,
         (GetGValue(c1)*I + GetGValue(c0)*(N-I)) div n,
         (GetBValue(c1)*I + GetBValue(c0)*(N-I)) div n
       );
end;
Aufruf mit (z.B.):
Delphi-Quellcode:
Mischfarbe := MergeColors (Color1, Color2, 7,10);
Die Mischfarbe wird aus 7 Teilen Color1 und 3 Teilen Color2 gemischt (7+3=10). Ob das dem physionomischen (oder wie das heisst) Farbempfinden entspricht, weiss ich nicht, aber mir reicht es.

Delphi-Quellcode:
MergeColors (C1,C2,0,N); // Liefert C2
MergeColors (C1,C2,N,N); // Liefert C1
Es ist ja eigentlich die gleiche Lösung.

ulrich.b 22. Dez 2006 15:53

Re: TColor gewichtet mischen
 
Zitat:

Zitat von alzaimar
Es ist ja eigentlich die gleiche Lösung.

Ja stimmt meine Funktion ist die selbe mit fixem N=256.

Aber trotzdem danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 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