Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farbpalette erstellen? (https://www.delphipraxis.net/16386-farbpalette-erstellen.html)

mirage228 16. Feb 2004 13:15


Farbpalette erstellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich wollte gerne eine Farbpalette zeichnen, wie im Anhang zu sehen ist.
Ich hab versucht den Code für einen normalen Farbverlauf zu modifizieren, aber so eine ganze Palette scheint doch etwas komplizierter zu sein...
Wie stelle ich das am Besten an?

mfG
mirage228

Matze 16. Feb 2004 13:20

Re: Farbpalette erstellen?
 
Hi!

Ich weiß nicht, wie das geht.


Für was brauchst du es denn?

Falls du's für ne Farbauswahl benötigst, kannst du auch ein normales Bitmap nehmen und die Farbe unter dem Cursor abfragen.

mirage228 16. Feb 2004 13:23

Re: Farbpalette erstellen?
 
Ich wollte mir eine kleine eigene Komponente basteln, die eine solche Palette darstellen kann. ^^

mfG
mirage228

APP 16. Feb 2004 13:24

Re: Farbpalette erstellen?
 
Hallo mirage228,

Du könntest auch den TColorDialog von Delphi verwenden, ist halt ein Dialog...

[EDIT] Ups, habe Deine Antwort zu spät gesehen [/EDIT]

mirage228 16. Feb 2004 13:26

Re: Farbpalette erstellen?
 
Hi App,

genau das wollte ich umgehen. Ich wollte nicht den nutzer einen eigenen Dialog aufrufen lassen, sondern es halt mit einer eigenen Komponente machen, die ich überall auf mein Form platzieren kann.

mfG
mirage228

CalganX 16. Feb 2004 13:26

Re: Farbpalette erstellen?
 
Hi,
du musst mal mit den HSB- und RGB-Werten rumprobieren.
Lass einfach eine Schleife durchlaufen und je nachdem, wo die 6 Werte (h, s, b, r, g, b) gerade sind, kannst du mal versuchen eine Farbe ausgeben.
Ist zwar Trial&Error, aber hilft immer... :)

Chris

Daniel 16. Feb 2004 13:27

Re: Farbpalette erstellen?
 
Kannst ja mal schauen, wie Mike Lischke dies für seine Komponente realisiert hat. Sein Download beinhaltet den Source. Die Optik ist zwar eine leicht Andere, aber vielleicht inspiriert Dich diese Herangehensweise ja zu irgendetwas. ;-)

http://www.delphi-gems.com/Controls.php#ColorPB

mirage228 16. Feb 2004 13:34

Re: Farbpalette erstellen?
 
Zitat:

Zitat von Daniel
Kannst ja mal schauen, wie Mike Lischke dies für seine Komponente realisiert hat. Sein Download beinhaltet den Source. Die Optik ist zwar eine leicht Andere, aber vielleicht inspiriert Dich diese Herangehensweise ja zu irgendetwas. ;-)

http://www.delphi-gems.com/Controls.php#ColorPB

Danke, werde ich mir mal anschauen ^^

mfG
mirage228

neolithos 16. Feb 2004 14:59

Re: Farbpalette erstellen?
 
Delphi-Quellcode:
procedure TForm1.cmdRGBtoHSVClick(Sender: TObject);
var iDelta,
    iMax,
    iMin,
    h, s, v : Double;
    r, g, b : Byte;
begin
  r := StrToInt(txtR.Text);
  g := StrToInt(txtG.Text);
  b := StrToInt(txtB.Text);


  iMax := MaxIntValue([R, G, B]);
  iMin := MinIntValue([R, G, B]);
  iDelta := iMax - iMin;
  h := 0;
  if iDelta > 0 then
     begin
       if r = iMax then h := (b - g) / iDelta;
       if b = iMax then h := (g - r) / iDelta + 2;
       if g = iMax then h := (r - b) / iDelta + 4;
     end;
  h := h * 60;
  if h < 0 then h := h + 360;
  if iMax = 0 then
     s := 0
  else
     s := iDelta / iMax;
  v := iMax / 255;

  txtH.Text := FloatToStr(h);
  txtS.Text := FloatToStr(s);
  txtV.Text := FloatToStr(v);
end;

const
  cdwKreis : array [0..5] of Cardinal = ($0000FF, $FF00FF, $FF0000,
    $FFFF00, $00FF00, $00FFFF);

procedure TForm1.cmdHSVtoRGBClick(Sender: TObject);
var iColor,
    iNext : Integer;
    dwColor : Cardinal;
    fDelta,
    h, s, v : Double;
begin
  h := StrToFloat(txtH.Text);
  s := StrToFloat(txtS.Text);
  v := StrToFloat(txtV.Text);

  iColor := Trunc(h / 60);
  fDelta := Frac(h / 60);

  if iColor = 5 then
     iNext := 0
  else
     iNext := iColor + 1;
  dwColor := GetMixColor(cdwKreis[iColor], cdwKreis[iNext], fDelta);
  dwColor := GetMixColor(dwColor, $FFFFFF, 1 - s);
  dwColor := GetMixColor(dwColor, 0, v);

  txtR.Text := IntToStr(GetRValue(dwColor));
  txtG.Text := IntToStr(GetGValue(dwColor));
  txtB.Text := IntToStr(GetBValue(dwColor));
end;
Vielleicht hilft das ja weiter...

mirage228 16. Feb 2004 17:37

Re: Farbpalette erstellen?
 
Hi!

Danke für den Code.

Um ihn noch ausprobieren zu können, bräuchte ich noch die Funktion GetMixColor(), die ich bei meinem Delphi nicht finden kann.

mfG
mirage228

neolithos 16. Feb 2004 17:41

Re: Farbpalette erstellen?
 
*ups*

Das liegt daran das sie bei Delphi nicht existiert.

Delphi-Quellcode:
function GetMixColor(adwStartColor, adwStopColor : Cardinal; afPos : Extended) : Cardinal;
  function Clc(abStart, abStop : Byte) : Byte;
  begin
    Result := abStart + Round((abStop - abStart) * afPos);
  end;
begin
  Result := Rgb(Clc(GetRValue(adwStartColor), GetRValue(adwStopColor)),
                Clc(GetGValue(adwStartColor), GetGValue(adwStopColor)),
                Clc(GetBValue(adwStartColor), GetBValue(adwStopColor)));
end;
<== Ganz praktisch auch für Farbverläufe.

:-D Übrigens den mist hab ich mir selbstausgedacht, also sorgsam damit umgehen! :wink:

mirage228 16. Feb 2004 17:45

Re: Farbpalette erstellen?
 
Zitat:

Zitat von neolithos
Übrigens den mist hab ich mir selbstausgedacht, also sorgsam damit umgehen! :wink:

Ok, wird gemacht ;-)

Danke nochmals ^^

mfG
mirage228

Alexander 16. Feb 2004 18:44

Re: Farbpalette erstellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Auch wenn das Thema eigentlich schon abgeschlossen ist, ich poste mal meine Versuche nette Effekte mit Farbverläufen zu malen ;-)
Das Prinzip: Eine Figur (z.b. 6-Eck) wird mit einer While-Schleife gemalt, wobei sich die Kantenlänge bei jedem Schleifendurchlauf verringert... Die Farben schwingen dabei von 0 nach 255 in verschiedenen Abständen
Das Ergebnis ist im Anhang ;-)

Matze 16. Feb 2004 18:50

Re: Farbpalette erstellen?
 
Boah, das sieht ja echt genial aus! :thumb:

Wie machst du das, damit es so eine Spirale gibt?

Alexander 16. Feb 2004 19:01

Re: Farbpalette erstellen?
 
Hallo,
eines vor weg: Ich habe es nicht mit Delphi gemacht, da ich keines zur Hand hatte. Habe JAVA genommen...
Ich habe halt immer "gedreht", also den Winkel verändert...

Matze 16. Feb 2004 19:03

Re: Farbpalette erstellen?
 
Thx, ich dachte jetzt, es wäre Delphi.

Sieht aber schon genial aus!

Alexander 16. Feb 2004 19:09

Re: Farbpalette erstellen?
 
Das ist sicherlich auch in Delphi mit Canvas möglich ;-) Habe nur gerade keines da...


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