Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Helligkeit in % aus einem RGB-Farbwert berechnen?!? (https://www.delphipraxis.net/2913-helligkeit-aus-einem-rgb-farbwert-berechnen.html)

DanielF 13. Feb 2003 13:28


Helligkeit in % aus einem RGB-Farbwert berechnen?!?
 
Hi Leute,
bei meinem Programm kann man die Schrift- u. Hintergrundfarbe einstellen.
Wie kann ich nun berechnen, welche Helligkeit die Schriftfarbe hat?
thx
Daniel

janjan 13. Feb 2003 14:13

Ich versteh nicht genau was du mit Helligkeit meinst...

Wenn du die Helligkeit einer Farbe im HSV-Systems meinst, dann kuck mal bei Google nach 'Umrechnung HSV RGB' oder so

DanielF 13. Feb 2003 14:17

es gibt doch diesen wert von 0-240, der die helligkeit einer farbe angibt. den mein ich.

janjan 13. Feb 2003 14:27

genau, den meine ich auch :)

Wie du vielleicht weißt, gibt es nicht nur das Farbsystem RGB, das man z.b. in Delphi benutzt, sondern auch das von mir oben schon erwähnte HSV System.

Eine RGB Farbe setzt sich aus 3 Werten zusammen die den Rot-, Grün- und Blauanteil beschreiben.

Beim HSV-Modell gibts zwar auch drei Werte, die bedeuten aber was anderes:

H: Farbwinkel (Hue) -> 0-360
S: Sättigung (Saturation) -> 0-1
V: Helligkeit (Value)-> 0-240

Du musst also deine RGB-Farbe in eine HSV-Farbe umrechnen um an die Helligkeit zu kommen.

für mehr Infos:
http://start.farben.rehbein.net/
http://www.beta45.de/farbcodes/theorie/farbmodelle.html

was die Umrechnung angeht, da hab ich auf die schnelle nur das hier gefunden, k.a. ob dir das hilft:

http://www-lehre.informatik.uni-osna...SV_Modell.html

DanielF 13. Feb 2003 15:03

danke. hab scho was gefunden ;)


Code:
procedure tform1.RGBtoHSV(Red, Green, Blue: Byte; var Hue: THue; var Saturation, Value: Byte);
var
  Maximum, Minimum: Byte;
  Rc, Gc, Bc: Single;
  H: Single;
begin
  Maximum := Max(Red, Max(Green, Blue));
  Minimum := Min(Red, Min(Green, Blue));
  Value := Maximum;
  if Maximum <> 0 then
    Saturation := MulDiv(Maximum - Minimum, 255, Maximum)
  else
    Saturation := 0;
  if Saturation = 0 then
    Hue := 0 // arbitrary value
  else
  begin
    Assert(Maximum <> Minimum);
    Rc := (Maximum - Red) / (Maximum - Minimum);
    Gc := (Maximum - Green) / (Maximum - Minimum);
    Bc := (Maximum - Blue) / (Maximum - Minimum);
    if Red = Maximum then
      H := Bc - Gc
    else if Green = Maximum then
      H := 2 + Rc - Bc
    else
    begin
      Assert(Blue = Maximum);
      H := 4 + Gc - Rc;
    end;
    H := H * 60;
    if H < 0 then
      H := H + 360;
    Hue := Round(H);
  end;
end;

DanielF 13. Feb 2003 15:13

dann müsst des doch so gehn oder?

Code:
Brightness := Max(Red, Max(Green, Blue));

d3g 13. Feb 2003 17:41

Zitat:

Zitat von DanielJ
Code:
  Maximum := Max(Red, Max(Green, Blue));
  // ...
  Value := Maximum;

Das dürfte deine Frage beantworten ;-).

Robert 16. Feb 2003 09:08

Delphi-Quellcode:
function getBrightness(R,G,B:BYTE):BYTE;
begin
  Result:=TRUNC(R*0.3 + G*0.59 + B*0.11);
end;
Wer den einzelnen Farben etwas mehr Farbbalancen zuweisen möchte, dem seien andere Koeffizienten geraten. Ich hab die Werte aus einer c't oder PC Magazin, glaub ich!


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