Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Farbmisch-Komponente (https://www.delphipraxis.net/158128-farbmisch-komponente.html)

SvenLittkowski 7. Feb 2011 03:51

Farbmisch-Komponente
 
Ich hatte schon mal vor einigen Jahrtausenden an so einer Komponente gearbeitet, und ich meine, ich hätte sie auch zu Ende entwickelt und einsetzen können. Aber nach über zehn Jahren und einigen neuen Festplatten finde ich den Code einfach nicht mehr. Daher starte ich nun die Entwicklung neu und laufe auch gleich in die ersten Probleme.

Ich will eine Delphi-Komponente erstellen, die zwei Farben (TColor) miteinander mischen kann, und zwar auch unter Berücksichtigung einer prozentuellen Mischungsstärke.

Beispiel 1: Mische zum Schwarz (RGB 00 00 00) die Farbe Weiß (RGB 255 255 255), aber nur 50%. Das Ergebis, in RGB, sollte dann ein dunkleres Grau (RGB 64 64 64) sein.
Beispiel 2: Mische zum Weiß (RGB 255 255 255) die Farbe Schwarz (RGB 00 00 00), aber nur 50%. Das Ergebis, in RGB, sollte dann ein helleres Grau (RGB 172 172 172) sein.

Hier der bisherige Code:

Code:
function Colorize(ColorOriginal, ColorAdded: TColor; PercentageStrength: SmallInt): TColor;
var
 Color1R, Color1G, Color1B: Real;
 Color2R, Color2G, Color2B: Real;
begin
 Color1R:=HexToFloat(copy(ColorOriginal,7,2));
 Color1G:=HexToFloat(copy(ColorOriginal,5,2));
 Color1B:=HexToFloat(copy(ColorOriginal,3,2));

 Color2R:=(HexToFloat(copy(ColorAdded,7,2))/100)*PercentageStrength;
 Color2G:=(HexToFloat(copy(ColorAdded,5,2))/100)*PercentageStrength;
 Color2B:=(HexToFloat(copy(ColorAdded,3,2))/100)*PercentageStrength;

 if(Color1R>((Color2R/PercentageStrength)*100)) then Color1R:=(Color1R-Color2R)div 2  // dies ist die Formel, aber ich denke, ich habe einen falschen Denkansatz
 else
 if(Color1R<((Color2R/PercentageStrength)*100)) then Color1R:=(Color1R+Color2R)div 2;

 ...
end;
Zur Zeit habe ich aber noch logische Probleme zu bewältigen. Wären beide Farben gleich stark zu mischen, wäre es einfach für mich. Mein Problem ist also kein programmiertechnisches, sondern eher ein mathematisches (Laßt dies bloß nicht meine einstigen Lehrer hören!). Könnt Ihr mir bei der Formel helfen?

Wenn dieses logische Problem gelöst ist, könnte es sein, daß ich mich erneut an Euch wende, um Fragen bei der Erstellung eienr Komponente zu lösen, aber dies ist noch nicht sicher, vieleicht schaffe ich dies auch alleine. Habe bisher nur jene alte Farbkomponente entwickelt und eigentlich vergessen, wie's geht. Jetzt aber brauche ich Hilfe bei der Formel. Hoffentlich konnte ich mich gut genug erklären. :-)

Übrigens, sobald ich diese Komponente fertig habe, stelle ich sie jedem als FreeWare zur Verfügung. Ich denke, man kann so eine Komponente recht gut gebrauchen, wenn man nur etwas Design und Farbe in die Programme hineinbringen will...

SvenLittkowski 7. Feb 2011 05:48

AW: Farbmisch-Komponente
 
Das Problem ist gelöst. Ich habe (leider) den kompletten Sourcecode so einer Funktion im Internet entdeckt, und zwar hier:
http://rmklever.com/?p=116

Vielen Dank trotzdem - für's Lesen. :-)


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