![]() |
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 |
Re: Farbpalette erstellen?
*ups*
Das liegt daran das sie bei Delphi nicht existiert.
Delphi-Quellcode:
<== Ganz praktisch auch für Farbverläufe.
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; :-D Übrigens den mist hab ich mir selbstausgedacht, also sorgsam damit umgehen! :wink: |
Re: Farbpalette erstellen?
Zitat:
Danke nochmals ^^ mfG mirage228 |
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 ;-) |
Re: Farbpalette erstellen?
Boah, das sieht ja echt genial aus! :thumb:
Wie machst du das, damit es so eine Spirale gibt? |
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... |
Re: Farbpalette erstellen?
Thx, ich dachte jetzt, es wäre Delphi.
Sieht aber schon genial aus! |
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 14:47 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