Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi komplementäre Farbe finden (https://www.delphipraxis.net/112254-komplementaere-farbe-finden.html)

hoika 17. Apr 2008 16:30


komplementäre Farbe finden
 
Hallo,

ich setze in einem Grid ein paar Farben (Brush.Color).

Damit der Text lesbar ist, will ich den
Text in der komplementäre Farbe schreiben.

unter http://dotnetpulse.blogspot.com/2007...ite-color.html
habe ich das hier gefunden.

public static Color CalculateOppositeColor(Color clr)
{
return Color.FromArgb(255 - clr.R, 255 - clr.G, 255 - clr.B);
}

In Delphi umgesetzt:

Delphi-Quellcode:
function RGB2TColor(const R, G, B: Byte): Integer;
begin
  // convert hexa-decimal values to RGB
  Result := R + G shl 8 + B shl 16;
end;

procedure TColor2RGB(const Color: TColor; var R, G, B: Byte);
begin
  // convert hexa-decimal values to RGB
  R := Color and $FF;
  G := (Color shr 8) and $FF;
  B := (Color shr 16) and $FF;
end;

function GetOppositeColor(theColor: TColor): TColor;
var
  R, G, B: Byte;
begin
  TColor2RGB(theColor, R, G, B);
  R:= 255-R;
  G:= 255-G;
  B:= 255-B;
  Result:= RGB2TColor(R,G,B);
end; { TResourcePlanClass_Int__ProjectViewEx.GetOppositeColor }
Bei gelbem Hintergrund (clYellow) gibt das jetzt weiss.
Das ist aber nicht dass, was ich erwartet hatte.

Wo steckt der Fehler ?


Danke
Heiko

rawsoul 17. Apr 2008 17:13

Re: komplementäre Farbe finden
 
Erst einmal hätte ich zu bemängeln, dass du als Programmiersprache C# angegeben hast, ändere das doch bitte ganz kurz ;)

Die Funktionen zur Umrechnung von TColor zu RGB kannst du dir sparen. Es gibt bereits Funktionen, die dies tun:
Delphi-Quellcode:
Farbe := RGB(Red, Green, Blue);
// und
R := GetRValue(Farbe);
G := GetGValue(Farbe);
B := GetBValue(Farbe);
// somit würde das Invertieren so aussehen:
InvertierteFarbe := RGB(255 - GetRValue(Farbe), 255 - GetGValue(Farbe), 255 - GetBValue(Farbe);
Du könntest doch auch einfach die Farben xor'en, der Kontrast müsste ausreichend gut sein.

Muetze1 17. Apr 2008 17:16

Re: komplementäre Farbe finden
 
Zitat:

Zitat von rawsoul
Du könntest doch auch einfach die Farben xor'en, der Kontrast müsste ausreichend gut sein.

Echt? Bitte ein Beispiel mit grau!

rawsoul 17. Apr 2008 17:40

Re: komplementäre Farbe finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mist, dabei war ich mir so sicher :wink: Bin auf das Problem noch nicht gestoßen, danke für die Info :)

//Edit:
Gerade mal ausprobiert - auch mit der Methode, wie der TS sie vorschlug, gibt es dabei Probleme. Aber allgemein stellt sich für mich die Frage: Wie bildet man die komplementäre Farbe eines Grautons (z.b. 7F7F7F / 127,127,127)?

Delphi-Quellcode:
procedure tform1.newcolors;
begin
  panel1.color := rgb(trackbar1.position, trackbar2.position, trackbar3.position);
  panel2.color := panel1.color xor clwhite;
  panel3.color := rgb(255 - getrvalue(panel1.color), 255 - getgvalue(panel1.color), 255 - getbValue(panel1.color));
  panel1.font.color := panel2.color;
end;

Muetze1 17. Apr 2008 19:23

Re: komplementäre Farbe finden
 
Zitat:

Zitat von rawsoul
Wie bildet man die komplementäre Farbe eines Grautons (z.b. 7F7F7F / 127,127,127)?

Alles richtig soweit, da die Komplementärfarbe genauso grau ist. Ist doch das gleiche Problem wie mit dem Komplementär zu einem 2 Farben Bild: Klappt alles wunderbar, bis du auf ein Bild stösst wo jeder zweite Pixel gesetzt ist. Da hast du dann als Komplementärbild dazu alle Pixel um ein verschoben, aber das erkennt keiner.

Die Frage nach dem Kontrast gestellt, wäre was anderes. Was hat den stärksten Kontrast zu grau? Weiß und Schwarz.

Das ganze Problem stellt sich nur bei der reinen Komplementärfarbe. Wenn du aber den grösstmöglichen Kontrast willst, dann ist das Komplement nicht hilfreich. Da müssen die Farbräume herangezogen werden.

hoika 17. Apr 2008 20:07

Re: komplementäre Farbe finden
 
Hallo,

ich will nur, dass man die Schrift lesen kann
*bescheiden ist*


Heiko

Hawkeye219 17. Apr 2008 21:40

Re: komplementäre Farbe finden
 
Hallo Heiko,

hast du es schon mit der Routine von shmia versucht?

Gruß Hawkeye

hoika 18. Apr 2008 06:45

Re: komplementäre Farbe finden
 
Hallo,

also das mit schwarz / weiss (shmia) klappt zumindestens.
Ich werde erst mal dabei bleiben.

Danke


Heiko

stahli 18. Apr 2008 13:20

Re: komplementäre Farbe finden
 
Vielleicht hilft es ja auch, mit Helligkeitswerten zu arbeiten...
hier

stahli


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