![]() |
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 |
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. |
Re: Farbpalette erstellen?
Ich wollte mir eine kleine eigene Komponente basteln, die eine solche Palette darstellen kann. ^^
mfG mirage228 |
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] |
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 |
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 |
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. ;-)
![]() |
Re: Farbpalette erstellen?
Zitat:
mfG mirage228 |
Re: Farbpalette erstellen?
Delphi-Quellcode:
Vielleicht hilft das ja weiter...
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; |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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