Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Farbauswahl (https://www.delphipraxis.net/7809-farbauswahl.html)

Sharky 22. Aug 2003 10:09

Re: Farbauswahl
 
Zitat:

Zitat von Matze
....Naja, jetzt hab ich's ja. So sieht's aus:

Wie hast Du es denn nun gemacht?

overmoon 22. Aug 2003 10:09

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....

Matze 22. Aug 2003 10:22

Re: Farbauswahl
 
Zitat:

Zitat von Sharky
Wie hast Du es denn nun gemacht?

Betriebsgeheimnis. :wink:

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.

Illuminator-23-5 22. Aug 2003 10:35

Re: Farbauswahl
 
codevorschlag:
Delphi-Quellcode:
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;
müsste theoretisch funzen

Matze 22. Aug 2003 10:51

Re: Farbauswahl
 
Da passiert nichts. :mrgreen:

Height ist dann 10 und Width: 0.

Illuminator-23-5 22. Aug 2003 10:57

Re: Farbauswahl
 
denkfehler:
Delphi-Quellcode:
PaintBox1.Width := (255 div step)*(255 div step)*(255 div step) DIV
lines
PaintBox1.Height := 5*lines;
müsst jetzt funzen, kanns aber nicht probieren

Matze 22. Aug 2003 11:15

Re: Farbauswahl
 
Danke, aber dann ist
Height: 5
Width: 1000

Alexander 22. Aug 2003 16:33

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 ;-)

Matze 22. Aug 2003 16:43

Re: Farbauswahl
 
So blöd bin ich auch nicht. :wink:

Code:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Panel1.Color:=PaintBox1.Canvas.Pixels[x,y];
end;
Gruß Matze

Alexander 22. Aug 2003 16:56

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.
Seite 2 von 3     12 3      

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