AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi RGB-Gegenteil-Farbe ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

RGB-Gegenteil-Farbe ermitteln

Ein Thema von KodeZwerg · begonnen am 17. Jul 2018 · letzter Beitrag vom 19. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 04:49
Erreichen will ich so etwas in der Art:
Ich gebe eine Hintergrund-Farbe vor und erhalte dafür die Gegenteilige Vordergrund-Farbe. Schwarz -> Weiß / Vorder- -> Hintergrund; ist nur exemplarisch damit man versteht worauf ich hinaus möchte.
Schau dir mal den HSV-Farbraum an. Dort kannst du dann die Farbwerte rotieren lassen.
Dankeschön, das schaue ich mir näher an!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 05:50
Bisheriger Fortschritt der oftmals ganz gut klappt:
Delphi-Quellcode:
GraphUtil.ColorRGBToHLS( mmo1.Font.Color, Hue, Luminance, Saturation );
Hue := Hue + 180;
mmo1.Color := GraphUtil.ColorHLSToRGB( Hue, Luminance, Saturation );
Total problematisch wird es bei sehr sehr dunklen bzw sehr sehr hellen Werten, da mache ich noch was falsch.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 06:41
Wenn es Dir, so wie es scheint, eher darum geht, gut lesbaren Kontrast zu haben, dann schau mal hier: https://trendct.org/2016/01/22/how-t...th-background/

Ist zwar aus der JavaScript-Welt, aber leicht zu verstehen und entsprechend umzusetzen.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 12:20
Ist zwar aus der JavaScript-Welt, aber leicht zu verstehen und entsprechend umzusetzen.
Danke sehr, habe es so umgesetzt:
Delphi-Quellcode:
function Brightness(const Input: TColor): TColor;
begin
 Result := Round((GetRValue(Input) * 299 + GetGValue(Input) * 587 + GetBValue(Input) * 114) / 1000);
end;
Wenn Input sehr dunkel ist versagt es.
Du könntest noch etwas am Helligkeitswert schrauben.
Delphi-Quellcode:
GraphUtil.ColorRGBToHLS( mmo1.Font.Color, Hue, Luminance, Saturation );
Hue := Hue + 180;
Luminance:= 120 - Luminance div 2;
mmo1.Color := GraphUtil.ColorHLSToRGB( Hue, Luminance, Saturation );
Danke sehr, das ist bis jetzt die Beste Variante.
aber nur entweder schwarz oder weiß
Genau so etwas hatte ich ja bereits und davon wollte ich weg, Danke trotzdem!
Das gesuchte Wort ist Komplementärfarbe (complemetary color).
Danke sehr für den Link, abgesehen davon das da auch InvertColor() angeboten wird in etwas kürzerer Form:
Delphi-Quellcode:
function InvertColor(const Input: TColor): TColor;
begin
  Result := RGB(255 - GetRValue(Input), 255 - GetGValue(Input), 255 - GetBValue(Input));
end;
habe ich das hier probiert:
Delphi-Quellcode:
function xorColor(BackgroundColor: TColor): TColor;
begin
  BackgroundColor := ColorToRGB(BackgroundColor);
  Result := RGB(
    IfThen(GetRValue(BackgroundColor)>$40, $00, $FF),
    IfThen(GetGValue(BackgroundColor)>$40, $00, $FF),
    IfThen(GetBValue(BackgroundColor)>$40, $00, $FF)
  );
end;
Das ist so wie nur Min oder Max. Also nicht direkt das was ich wollte, vielleicht habe ich auf der Seite auch was überlesen.



Ydobons Vorschläge in welche Richtung ich mich bewegen sollte finde ich bis jetzt am besten da ich noch keine Farbe entdeckt habe wo sich Vorder-/Hintergrund dolle in die Quere kommt und nicht nur Schwarz/Weiß als Resultat definiert wird.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 12:31
Ist zwar aus der JavaScript-Welt, aber leicht zu verstehen und entsprechend umzusetzen.
Danke sehr, habe es so umgesetzt:
Delphi-Quellcode:
function Brightness(const Input: TColor): TColor;
begin
 Result := Round((GetRValue(Input) * 299 + GetGValue(Input) * 587 + GetBValue(Input) * 114) / 1000);
end;
Wenn Input sehr dunkel ist versagt es.
Die Funktion berechnet auch nur die Helligkeit des Wertes, basierend auf dieser wird dann die Overlay-Farbe ermitteln ($00333333 bzw $00FFFFFF).

Komplementärfarben können oft schwer zu lesen sein bzw. unangenehm für den Betrachter. Würde ich nicht zu raten.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 12:44
Komplementärfarben können oft schwer zu lesen sein bzw. unangenehm für den Betrachter. Würde ich nicht zu raten.
Absolut! Das führt zu so Augenkrebs wie in der DevExpress Progressbar, die magentafarbene Schrift auf grüner Progressbar zeichnet
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 13:31
Ich möchte das im Endeffekt nicht für Text verwenden, das dient mir hier nur als Beispiel, sondern damit dynamisch die Farbe des Cursors setzen bzw ein Auswahl-Rechteck damit einfärben. Also Krebs-Faktor hält sich in Grenzen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Namenloser

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

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 18:08
Komplementärfarben können oft schwer zu lesen sein bzw. unangenehm für den Betrachter. Würde ich nicht zu raten.
Absolut! Das führt zu so Augenkrebs wie in der DevExpress Progressbar, die magentafarbene Schrift auf grüner Progressbar zeichnet
Besonders schlimm ist es, wenn der Hintergrund 50%-Grau ist. Dann ist der Vordergrund unsichtbar.
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 06:41
Du könntest noch etwas am Helligkeitswert schrauben. In etwa
Luminance:=120 - Luminance div 2 oder so.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: RGB-Gegenteil-Farbe ermitteln

  Alt 18. Jul 2018, 09:05
Wir nutzen diese Funktion hier, um die Schriftfarbe entsprechend dem Hintergrund zu wählen (aber nur entweder schwarz oder weiß) - das funktioniert dann so wie in dem Artikel, den Sakura gelinkt hat.

Delphi-Quellcode:
function ContrastColor(AColor: TColor): TColor;
type
  TRGB = packed record
    R, G, B, X: Byte;
  end;
var
  LColor: TRGB;
  LLuminance: Double;
begin
  Integer(LColor) := AColor;

  // Counting the perceptive luminance - human eye favors green color...
  // see https://de.wikipedia.org/wiki/Luminanz
  LLuminance := (0.2126 * LColor.R + 0.7152 * LColor.G + 0.0722 * LColor.B) / 255;

  if LLuminance > 0.5 then
    Result := clBlack
  else
    Result := clWhite; // dark colors - white font
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (18. Jul 2018 um 09:11 Uhr)
  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 18:22 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