AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbexperten: Farbwerte für Segmentierung finden

Ein Thema von Jazzman_Marburg · begonnen am 7. Apr 2012 · letzter Beitrag vom 8. Apr 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:53
@Aphton

Nur bedingt. Kleiner Trick (ohne Gewähr), wenn man das so nennen darf, zwei Farben prozentual mischen, wobei einer der Farben Weiß ist.

//Edit:

Ich hab meine Aussage getestet und auf die Schnelle eine Funktion geprogt die zwei Farben prozentual mischt. Ist eine davon weiß, wird die Farbe heller. Nimmt man als zweite Farbe schwarz, wird es dunkler. Das Ganze scheint irgendwie zu funktionieren.

Delphi-Quellcode:
function ColorMix(Col1, Col2: TColor; PercCol1: Byte): TColor;
var
  R, G, B: Integer;
begin
  if PercCol1 > 100 then PercCol1 := 100;

  R := Round(GetRValue(Col1) + ((GetRValue(Col2) - GetRValue(Col1)) * PercCol1 / 100));
  G := Round(GetGValue(Col1) + ((GetGValue(Col2) - GetGValue(Col1)) * PercCol1 / 100));
  B := Round(GetBValue(Col1) + ((GetBValue(Col2) - GetBValue(Col1)) * PercCol1 / 100));

  Result := RGB(R, G, B);
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Color := ColorMix($000080FF, clWhite, TrackBar1.Position);
end;

Geändert von Popov ( 7. Apr 2012 um 22:12 Uhr)
  Mit Zitat antworten Zitat
Namenloser

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

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:13
Mein Vorschlag: Logik von Darstellung trennen (originell, ich weiß).

Statt den „Wert“ der Straße direkt als Farbe zu speichern, speicherst du ihn als Wert zwischen 0.0 und 1.0 (über Gleitkommazahlen oder über einen entsprechend skalierten Integer, wie auch immer). Am Ende multiplizierst du einfach die Maximalfarbe mit dem Wert. Dadurch reduzierst du außerdem Rundungsfehler.

Beispiel:
FarbeMaximal = RGB($FF, $00, $00) (100% rot)

Wert = 0.0
-> Farbe = RGB($FF*0.0, $00*0.0, $00*0.0) = RGB($00, $00, $00); (schwarz)

Wert = 0.5
-> Farbe = RGB($FF*0.5, $00*0.5, $00*0.5) = RGB($7F, $00, $00); (dunkelrot)

Wert = 1.0
-> Farbe = RGB($FF*1.0, $00*1.0, $00*1.0) = RGB($FF, $00, $00); (100% rot)

Je nachdem, wie das Mapping verlaufen soll, kannst du den Wert auch vorher potenzieren (Stichwort Gamma). Also z.B. Wert = Power(Wert, 2.2); für einen Gammawert von 2.2.

Natürlich kannst du auch, wie schon vorgeschlagen, ein anderes Farbmodell wie HSV statt RGB verwenden, aber imo ist das für diesen Zweck unnötig kompliziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07: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