![]() |
Farbwerte zwischen Schwarz und Weiß berechnen?
Wer könnte mir bei folgendem Problem einen Tipp geben?
Ich habe ein Panel und in der Mitte des Panels ein Objekt. Wenn der Mauszeiger sich am Rande des Panels befindet, ist die Farbe des Panels Schwarz. Je mehr der Mauszeiger sich dem Objekt in der Mitte des Panels nähert, desto heller wird die Farbe des Panels. Wenn der Mauszeiger das Objekt in der Mitte des Panels erreicht, ist die Farbe des Panels Weiß. Dazwischen sollen alle Schattierungen zwischen Schwarz und Weiß (also von Schwarz über Dunkelgrau und Hellgrau bis Weiß) fließend dargestellt werden. Wie könnte man das angehen? Die Berechnung der Entfernung zum Mittelpunkt des Panels ist nicht schwierig. Wie kann man aber die Reihe der Farbwerte zwischen Schwarz und Weiß berechnen? |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Weiß ist der Wert 255 für alle 3 Farbanteile. Schwarz hingegen der Wert 0 für alle 3 Farbanteile.
Den Farbwert kannst du entsprechend mit einer einfachen Verhältnisgleichung berechnen. Ist man ganz am Anfang bei Schwarz ist der Wert 0, ist man genau in der Mitte zwischen Schwarz und weiß wird auch genau der Wert dazwischen genommen (255 / 2) |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Das ist eigentlich recht einfach. Das Schwierigste ist die Definition des Abstands. Wenn man eifnach den Satz des Pythagoras anwenden würde, wäre es nicht überall am Rand gleich Dunkel. Wie du das definierst überlasse ich daher dir.
Delphi-Quellcode:
function Gray(value: byte): tcolor
begin result := rgb(value,value,value); end; ... Panel.Color := Gray(distance*255 div max_distance); |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Zitat:
Weiss -> $FFFFFF Schwarz -> $000000 |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Zitat:
Ein Punkt P innerhalb eines Rechteckes besitzt 4 Entfernungswerte zu den Rändern des Rechteckes, wenn man diese Entfernungen ausgehend von P als Linien mit einem rechten Winkel zu den Rändern definiert. Dann ist aber die Summe dieser 4 Entfernungswerte in jedem Fall unabhängig von der Position von P immer gleich. Könnte man den Entfernungswert also so festlegen, dass man ihn als Entfernung zur nächstgelegenen Seite des Rechteckes definiert? Würde diese Definition dem entsprechen, was man in der sinnlichen Wahrnehmung als "Nähe zum Rand" (im Umkehrschluss also als Entfernung zur Mitte) definieren würde? |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Ein Rechteck ist für diese Wahrnehmung (d.h. Berechnung) grundsätzlich ungünstig! Kannst du nicht einen Umkreis verwenden?
|
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Zitat:
Könnte man deshalb bei der Berechnung des Grauwertes eine unterschiedliche Gewichtung vornehmen?: Es wird ein Mittelwert zwischen den beiden Berechnungstypen gebildet; je näher zum Mittelpunkt (nach der pyth. Formel) sich P aber befindet, desto stärker fällt die pyth. Formel ins Gewicht? |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Ich denke, wir reden aneinander vorbei.
Nur ein Kreis ermöglicht die gewünschte Skalierbarkeit auf ideale Weise. Für ein Quadrat/Rechteck musst du, wie du schon bemerkt hast, eine zusätzliche Gewichtung vornehmen - ob diese aber für den Betrachter (gleichwohl sie mathematisch korrekt sei) intuitiv nachvollziehbar wäre, ist m.E. eine ganz andere Frage. |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Delphi-Quellcode:
Experimentell... relativ gutes Ergebnis (im vergleich zu meinen anderen versuchen). Kannst ja noch etwas dran herumspielen. Wie schon gesagt, eine perfekte Lösung kann es nicht geben.
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var value1, value2, value: double; c: byte; w,h: integer; begin w := panel1.width; h := panel1.height; // (x-w/2)/w) = x/w - 0.5 value1 := max(abs(x/w-0.5), abs(y/h-0.5))*2; value2 := {1-sqrt(sqr(x-w/2)+sqr(y-h/2))/sqrt(sqr(w/2)+sqr(h/2))} abs(x/w-0.5)*abs(y/h-0.5)*2; value := {max(value1,value2)}max(max((value1+value2)/2,value1),value2); c := round(255-value*255); panel1.color := rgb(c,c,c); end; |
Re: Farbwerte zwischen Schwarz und Weiß berechnen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich werde den Code morgen früh, wenn ich geistig wieder etwas frischer bin, genauer analysieren. Inzwischen habe ich mal das fertige Projekt hochgeladen, damit es sich jeder ansehen kann. Nochmals vielen Dank!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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 by Thomas Breitkreuz