AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Farbwerte zwischen Schwarz und Weiß berechnen?
Thema durchsuchen
Ansicht
Themen-Optionen

Farbwerte zwischen Schwarz und Weiß berechnen?

Ein Thema von PeterPanino · begonnen am 1. Jan 2009 · letzter Beitrag vom 2. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 22:53
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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:01
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:03
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);
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
679 Beiträge
 
Delphi 12 Athens
 
#4

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:08
Zitat von SirThornberry:
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)
Wie SirThornberry bereits geschrieben hat. kannst Du die Distanz, bzw. der Farbwert,mathematisch bestimmen. Es gilt einzig zu beachten, dass die zu übergebenden Werte noch gewandelt werden müssen (Dezimal -> Hexadezimal)
Weiss -> $FFFFFF
Schwarz -> $000000
Roland
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:27
Zitat von NamenLozer:
Wenn man eifnach den Satz des Pythagoras anwenden würde, wäre es nicht überall am Rand gleich Dunkel.
Hmm, ja, du hast recht. Sollte man also den Grauwert als Funktion des Abstandes vom Rand des Panels berechnen? Innerhalb eines Rechteckes ist die größte Entfernung eines Punktes von den Rändern genau der Mittelpunkt des Rechteckes.

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?
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#6

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:34
Ein Rechteck ist für diese Wahrnehmung (d.h. Berechnung) grundsätzlich ungünstig! Kannst du nicht einen Umkreis verwenden?
Ralph
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 1. Jan 2009, 23:47
Zitat von taaktaak:
Ein Rechteck ist für diese Wahrnehmung (d.h. Berechnung) grundsätzlich ungünstig! Kannst du nicht einen Umkreis verwenden?
Wie NamenLozer bereits sagte, wäre das in der Wahrnehmung ungünstig, weil dann der Grauwert an unterschiedlichen Positionen der Ränder unterschiedlich wäre. In der visuellen Wahrnehmung zählt jedoch m.E. auch die Entfernung zum Rand.

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?
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#8

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 2. Jan 2009, 00:01
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.
Ralph
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 2. Jan 2009, 00:41
Delphi-Quellcode:
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;
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.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Farbwerte zwischen Schwarz und Weiß berechnen?

  Alt 2. Jan 2009, 01:29
Zitat von NamenLozer:
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.
WOWWWWWWWWWWW!!! Das funktioniert schon sehr gut! Ich habe das Fenster auf meinem 2560 Pixel breiten Schirm mal ganz breit gemacht, und den Mauspfeil an verschiedenen horizontalen Positionen knapp am oberen Rand gehalten: Dabei blieb das Schwarz immer gleich dunkel. Trotzdem hat man das Gefühl, dass beim Bewegen auf den Mittelpunkt des Panels zu die "Farbbeschleunigung" relativ zur Entfernung des Mittelpunktes natürlich aussieht.

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!!!
Angehängte Dateien
Dateityp: zip mousemovecolorpanel_909.zip (193,3 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:37 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