Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TColor - Helligkeit und Sättigung (Get/Set) (https://www.delphipraxis.net/31883-tcolor-helligkeit-und-saettigung-get-set.html)

static_cast 15. Okt 2004 10:22


TColor - Helligkeit und Sättigung (Get/Set)
 
Hallöle,

ich suche eine function zum setzen und lesen der Helligkeit und Sättigung eines TColor wertes, hat da vllt jemand was zu?

Ich stelle mir das so vor:

Delphi-Quellcode:
function GetLightness(AColor:TColor):Byte;
function GetSatiation(AColor:TColor):Byte;
procedure SetLightness(var AColor:TColor; AValue:Byte);
procedure SetSatiation(var AColor:TColor; AValue:Byte);
Hoffe ihr könnt mir da etwas weiterhelfen. Hab auch schon gesucht aber die ergebnis waren nicht so das was ich suchte ;)

alcaeus 15. Okt 2004 10:28

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
Hi Daniel,

vielleicht hilft dir dieser Tipp weiter. Wenigstens die Get-Funktionen kannst du ohne Probleme realisieren, mit den Set-Prozeduren siehts ein bisschen schwerer aus.

Greetz
alcaeus

Gruber_Hans_12345 15. Okt 2004 10:31

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
hast du schon auf efg Labs nachgesehen ?
dort haben die sicher was

static_cast 15. Okt 2004 11:23

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
@alcaeus

hmm ja den hatt ich auch schon gesehen, konnt ich nur nicht so viel mit anfangen, blicke da nicht so wirklich durch die berechnug durch, ist etwas sehr wirr.

@Gruber_Hans_12345

ne aber war ein guter tipp, danke! ich hab das jetzt zwar durchgeschaut aber ist auch nicht so wirklich was brauchbares bei...

alcaeus 15. Okt 2004 11:50

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
Zitat:

Zitat von static_cast
hmm ja den hatt ich auch schon gesehen, konnt ich nur nicht so viel mit anfangen, blicke da nicht so wirklich durch die berechnug durch, ist etwas sehr wirr.

Delphi-Quellcode:
Maximum := Max(Red, Max(Green, Blue));
Minimum := Min(Red, Min(Green, Blue));
Brightness := Maximum;
Saturation := MulDiv(Maximum - Minimum, 255, Maximum)
:shock: Was ist daran bitte so kompliziert? Na klar, umgekehrt wirds etwas schwerer, aber wenigstens die Get-Routinen sollten möglich sein. Du musst nur noch die RGB-Werte aus dem TColor auslesen, und das sollte mit dieser Funktion kein Problem sein:
Delphi-Quellcode:
procedure GetRGB(Color: TColor; var r, g, b: Byte);
var
  rgb: DWord;
begin
  rgb := ColorToRGB(Color);
  r := Byte(rgb);
  g := Byte(rgb shr 8);
  b := Byte(rgb shr 16);
end;
PS: Ich habe sie nicht getestet ;)

Greetz
alcaeus

static_cast 15. Okt 2004 12:03

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
@alcaeus

nee ich mag kein vorgekauten code der so wirr ist (deswegen konnt ich mit dem post nix anfangen), dann bau ich es mir selber ;)

Hehe jetzt hab ich meine get functions auch fertig ;) die funzen auch, ist zwar eine abweichung von +/- 1..2 aber damit kann ich leben *g*

jetzt muss ich noch die set proceduren baun, mal schaun, hat da wer noch gute infos?

Delphi-Quellcode:
function GetLightness(AColor:TColor):Byte;
var
  R,G,B:Byte;
  MaxValue,MinValue:Double;
  Lightness:Double;
begin
  R:=GetRValue(ColorToRGB(AColor));
  G:=GetGValue(ColorToRGB(AColor));
  B:=GetBValue(ColorToRGB(AColor));

  MaxValue:=Max(Max(R,G),B);
  MinValue:=Min(Min(R,G),B);

  Lightness:=(((MaxValue + MinValue) * 240) + 255 ) / 510;

  Result:=Round(Lightness);
end;

function GetSaturation(AColor:TColor):Byte;
var
  R,G,B:Byte;
  MaxValue,MinValue:Double;
  Lightness,Saturation:Double;
begin
  R:=GetRValue(ColorToRGB(AColor));
  G:=GetGValue(ColorToRGB(AColor));
  B:=GetBValue(ColorToRGB(AColor));

  MaxValue:=Max(Max(R,G),B);
  MinValue:=Min(Min(R,G),B);

  Lightness:=(((MaxValue + MinValue) * 240) + 255 ) / 510;

  if Lightness <= 120 then
  begin
    Saturation:=(((MaxValue - MinValue) * 240) +
                 ((MaxValue + MinValue) / 2)) /
                  (MaxValue + MinValue);
  end else
  begin
    Saturation:=(((MaxValue - MinValue) * 240) +
                 ((510 - MaxValue - MinValue) / 2)) /
                  (510 - MaxValue - MinValue);
  end;

  Result:=Round(Saturation);
end;
PS: Ihr könntet die funktionen ja auch mal testen.

Gruber_Hans_12345 15. Okt 2004 12:33

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
nichts gefunden .... hm

ist das was du suchst nicht dsa selbe wie ein HSV Diagramm ?

das hams (samt Komponenten) da : http://www.efg2.com/Lab/Graphics/Colors/HSV.htm

static_cast 15. Okt 2004 16:17

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
ne ich wollte keine monster komponente haben ich wollte nur diese 4 funktionen und die auch noch wenn möglich recht kompakt halten.

Gruber_Hans_12345 15. Okt 2004 16:24

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
und direkt auf der Seite die zwei Funktionen HSVtoRGB und RGBtoHSV :gruebel:

static_cast 15. Okt 2004 16:32

Re: TColor - Helligkeit und Sättigung (Get/Set)
 
ja schon aber wenn ich schon lese "uses ... IEEE754, // NaN, IsNaN" das ist mir alles zu komplex und umfangreich ich möchte nur das nötigste haben.

das soll auch schnell und portabel nutzbar sein, komponenten müssen installiert werden, dateien muss man mitliefer...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Seite 1 von 2  1 2      

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