![]() |
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; |
Re: TColor gewichtet mischen
Also ich habe das so gelöst:
Delphi-Quellcode:
Aufruf mit (z.B.):
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;
Delphi-Quellcode:
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.
Mischfarbe := MergeColors (Color1, Color2, 7,10);
Delphi-Quellcode:
Es ist ja eigentlich die gleiche Lösung.
MergeColors (C1,C2,0,N); // Liefert C2
MergeColors (C1,C2,N,N); // Liefert C1 |
Re: TColor gewichtet mischen
Zitat:
Aber trotzdem danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz