Re: Farbauswahl
Zitat:
|
Re: Farbauswahl
Einen Verlauf, in dem alle Farben enthalten sind, das wird recht schwierig;
ich würde fast sagen, das geht nicht. Man muss sich nur folgendes Überlegen: - Jede Farbe ist ein Tripel bestehend aus den drei Teilen rot, grün und blau - Für rot, grün und blau gibt es jeweils 256 Möglichkeiten (0..255) Das Ergibt: 256*256*256 = 16777216 verschiedene Farben ! Würde man jedem Pixel eine andere Farbe geben und ein Panel nehmen, das 1024 Pixel breit ist, so müsste es 16777216 / 1024 = 16384 Pixel hoch sein. Das wird wohl auch auf dem größten Monitor schwierig. Also muss man die Anzahl der Farben verringern oder eine andere Darstellungsart finden. Ich denke mal in die erste Richtung weiter. Verringern wir z.B. auf 16 Abstufungen innerhalb von rot, grün und blau, so haben wir nur noch: 16*16*16 = 4096 Farben. Diw könnte man "Problemlos" auf einem Panel von 128*32 Pixel Größe darstellen. Ich finde eine Aufteilung in 18 Schritte sinnvoll: r,g,b € F = {0,15,30,45,60,75,90,105,120,135,150,165,180,195,2 10,225,240,255} |F| = 5832 = 2^3 * 3^6 Diese könnte man z.B. in einem Bereich von 216*27 Pixeln alle darstellen, was einen Bereich von einer Größe ist, der mir sinnvoll erscheint. Nun müsste man sich jetzt überlegen, wie man alle möglichen Tripel (r,g,b) mit r,g,b € F darstellt. Dafür bietet sich die Möglichkeit über die drei For-Schleifen an, die Illuminator-23-5 vorgeschlagen hat. :hello: overmoon ps: ohh, zu spät.... |
Re: Farbauswahl
Zitat:
Das ist einfach eine lange procedure, mehr nicht. :wink: Muss aber noch was ändern, da ich die PaintBox, auf der es ist, nicht kleiner machen kann, da sonst Farben fehlen. Gruß Matze. |
Re: Farbauswahl
codevorschlag:
Delphi-Quellcode:
müsste theoretisch funzen
procedure TForm1.Button1Click(Sender: TObject);
const step = 25; lines = 1; var r, g, b, x: integer begin PaintBox1.Width := (255 div step)*(255 div step)*(255 div step) mod lines; PaintBox1.Height := 5*(lines + 1); x := 0; for r := 0 to 255 div step do for g := 0 to 255 div step do for b := 0 to 255 div step do with PaintBox1 do begin inc(x); Canvas.Brush.Color := RGB(r*step, g*step, b*step); Canvas.Pen.Color := RGB(r*Step, g*step, b*step); Canvas.MoveTo(x mod lines, x div lines); Canvas.LineTo(x mod lines, x div lines + 5); end; end; |
Re: Farbauswahl
Da passiert nichts. :mrgreen:
Height ist dann 10 und Width: 0. |
Re: Farbauswahl
denkfehler:
Delphi-Quellcode:
müsst jetzt funzen, kanns aber nicht probieren
PaintBox1.Width := (255 div step)*(255 div step)*(255 div step) DIV
lines PaintBox1.Height := 5*lines; |
Re: Farbauswahl
Danke, aber dann ist
Height: 5 Width: 1000 |
Re: Farbauswahl
Da es sich ja um eine Farbauswahl handelt, kommt sicherlich gleich die Frage wie ich die Farbe unterm Mauscursor auslesen kannst :mrgreen:
Dazu solltest du dir GetRValue, GetGValue und GetBValue in der Hilfe anschauen ;-) |
Re: Farbauswahl
So blöd bin ich auch nicht. :wink:
Code:
Gruß Matze
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin Panel1.Color:=PaintBox1.Canvas.Pixels[x,y]; end; |
Re: Farbauswahl
Habe ich auch nciht gesagt, nur habe ich gerade jemand anders per ICQ gesagt wie er die einzelnen RGB-Werte rausbekommt, dann den Thread gesehen und dann gleich gepostet :mrgreen:
Sorry |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 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