Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farbpaltte erstellen mit 255 farben (https://www.delphipraxis.net/56478-farbpaltte-erstellen-mit-255-farben.html)

mimi 6. Nov 2005 15:16


Farbpaltte erstellen mit 255 farben
 
Hallo,
ich habe schon die suche bentutz aber leider nichts passendes zu meinem problem gefunden.

Ich möchte auf ein panel 255 farben dastellen und zwar so:
die hellen farbtöne sollen oben sein und die dunkeln unten.

Ich habe die TShape genommen und auch schon einiges versucht mein erster gedanke war:
Delphi-Quellcode:
  for i:=0 to 255 do begin
    Shape:=TShape.Create(self);
    Shape.Left:=(18)*i;
    Shape.top:=25;
    Shape.Width:=16;
    Shape.Height:=16;
    Shape.Brush.Color:=i;
    Shape.Parent:=ScrollBox2;
  end;
aber leider sehe ich so nur die schwartz und rot töne aber die andren nicht.
dann wollte ich es mit RGB(mit der Funktion) das ging dann auch nicht:
Delphi-Quellcode:
 end;
      for i:=0 to 255 do begin
        Shape:=TShape.Create(self);
        Shape.Left:=(18)*i;
        Shape.top:=25;
        Shape.Width:=16;
        Shape.Height:=16;
        if 255-i < 45 then break;
        Shape.Brush.Color:=RGB(0,i,255-i);
        Shape.Parent:=ScrollBox2;
      end;
so sehe ich leider auch nicht alle töne....

ich hoffe einer kann mir ein kleinen tip geben wir ich mein problem lösen kann.
(aufjedenfall währe ich dankbar *G*)

!!! Vielen Danke im Vorraus !!!

ripper8472 6. Nov 2005 15:22

Re: Farbpaltte erstellen mit 255 farben
 
schwierig. wenn in 8 bit 3 kanaele passen sollen, musst du 2.67 bit je kanal veranschlagen.

beherrschst du bitshifting operatoren?

Der_Unwissende 6. Nov 2005 16:09

Re: Farbpaltte erstellen mit 255 farben
 
Hey,
ich glaube ich hab noch nicht ganz verstanden was du machen willst. Deshalb mal ein Ansatz, der sich vielleicht auch in eine völlig andere Richtung bewegt.
Ich würde dir jedenfalls dazu raten, mit einer Bitmap und einem Panel zu arbeiten (Genau genommen mit einer Bitmap, einem Image und Panel). Das Image platzierst du dann auf dem Panel und schaltest Stretched auf True.
Um die Farben zu erzeugen, benutzt du einfach eine Hintergrundbitmap, in der du jeder Zeile mit der jeweiligen Farbe füllst. Da du von 255 Farben sprichst, weiß ich jetzt nicht wirklich auf welche Farben du dich beziehst. Soweit ich es weiß, ist eine 8-Bit Bitmap eine mit Farbpalette, oder?

Hier jedenfalls mal als kleines Beispiel (mit "Farbpalette").
Delphi-Quellcode:
var bitmap : TBitmap;
    i : Integer;
begin
 bitmap := TBitmap.Create;
 bitmap.Width := 1;
 bitmap.Height := 256;
 for i := 0 to 255 do
  begin
   // mit palette = Array[0..255] of Byte
   // gefüllt mit allen verwendeten Farben
   bitmap.Canvas.Pixels[0,i] := palette[i];
  end;  
 image.Picture.Bitmap := bitmap;
 bitmap.Free;
end;
Wie gesagt, müsstest halt Palette füllen oder die jeweilige Farbe berechnen.

Gruß Der Unwissende

ripper8472 6. Nov 2005 16:16

Re: Farbpaltte erstellen mit 255 farben
 
ich versuch mal mein glueck:
(pseudocode)
Delphi-Quellcode:
var
  palette: array [0..255] of cardinal;
  i: integer;
begin
  for i := 0 to 255 do
  begin
    palette[i] :=
      (i and $E0) shl (16+0)
      or
      (i and $18) shl (8+3)
      or
      (i and $07) shl (0+5);
  end;
end;
basiert auf der annahme, dass RGB 3,2,3 bit bekommen.

damit bekommst du kein reines weiss hin, aber reines schwarz.

mimi 6. Nov 2005 16:34

Re: Farbpaltte erstellen mit 255 farben
 
@Ripper8472
du bist schon nahr dran was ich machen wollte. nur:
ich möchte gerne wenn dies möglich ist: die hellen farben nach oben und die dunkeln nach unten und evlt. von jeden ton 4 farben(das wird warscheinlich mehr werden als 256 farben)

und um deine ersten antwort zu beantowrten: nein ich beherrsche leider keine "bitshifting operatoren"(was ist das eigentlich genau: werden dort irgenwelche byte verschoben ?)

@Der_Unwissende
eine BMP möchte ich eigentlich nicht nehmen weil die frist mit zu viel speicher und die farben kann nicht so gut geändert werden(nagut mit pixels[x,y] schon aber naja)

ripper8472 6. Nov 2005 16:49

Re: Farbpaltte erstellen mit 255 farben
 
Zitat:

Zitat von mimi
@Ripper8472
du bist schon nahr dran was ich machen wollte. nur:
ich möchte gerne wenn dies möglich ist: die hellen farben nach oben und die dunkeln nach unten und evlt. von jeden ton 4 farben(das wird warscheinlich mehr werden als 256 farben)

moeglich, aber der code wird mehr als unfeierlich... ich probiers mal (->edit).

Zitat:

Zitat von mimi
und um deine ersten antwort zu beantowrten: nein ich beherrsche leider keine "bitshifting operatoren"(was ist das eigentlich genau: werden dort irgenwelche byte verschoben ?)

jep, die bits werden hin- und hergeschoben.
beispiel: 42 ist ja 00101001
42 shl 2 (shift nach links) waere dann 10100100, also 164.

edit: ich mach doch besser nen neuen post...

ripper8472 6. Nov 2005 17:43

Re: Farbpaltte erstellen mit 255 farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich versuch mich mal. wie versprochen, es wird haarig. und ungetestet (fast...)
Delphi-Quellcode:
var
  palette: array [0..255] of cardinal;
  i: integer;
begin
  for i := 0 to 255 do
  begin
    palette[i] := { wenns umgekehrt sein soll, dann [255-i] }
      (((i and $80) shl 0) or ((i and $10) shl 2) or ((i and $04) shl 3)) shl (16) { blau }
      or
      (((i and $40) shl 1) or ((i and $02) shl 5)) shl (8) { gruen }
      or
      (((i and $20) shl 2) or ((i and $08) shl 3) or ((i and $01) shl 5)) shl (0); { rot }
  end;
end;

mare_crisium 6. Nov 2005 18:37

Re: Farbpaltte erstellen mit 255 farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mimi,

das mit den Farben ist nur halb so schlimm, wie's aussieht.

Der Typ Tcolor enthält je ein Byte für die Farben Rot, Grün und Blau:

Wenn Du eine Variable "farbe" vom Typ "Tcolor" einrichtest, dann kannst Du aus drei Bytes, "rot", "gruen" und "blau" die Farbe mit der Anweisung

farbe:=rot+256*gruen+256*256*blau

einstellen.

Die Helligkeit wächst mit zunehmenden Werten für "rot", "gruen" und "blau". Wenn alle drei gleich 255 sind, dann bekommst Du die Farbe weiss. Die angehängt Unit zeigt, wie's geht.

Das ist schon alles. Oder?

Mare_crisium.

mare_crisium 7. Nov 2005 22:06

Re: Farbpaltte erstellen mit 255 farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mimi,

ich hatte übersehen, dass Du ja einen Farbverlauf von hell nach Dunkel haben wolltest. Das kriegst Du mit einem TShape nicht hin. Guck' Dir
mal die angehängte Unit an. Die arbeitet mit einer TpaintBox, mit der
klappt sowas eigentlich immer.

Mare_crisium.

mimi 12. Nov 2005 18:56

Re: Farbpaltte erstellen mit 255 farben
 
leider kann ich mich nur einmal in der woche melde und das ist heute und auch morgen *G*
ist ja nett das ihr mir soviel antworten geschrieben habt doch leider wahr keine passende dabei:
@mare_crisium
Deine beiden unit habe ich mir angeschaut doch solche beispiele hatte ich schon auf meinen rechner und bin damit auch nicht weiter gekommen :(

@ripper8472
Du hast mich anscheiend verstanden doch noch nicht vollständig
Ich habe leider kein bild, ich versuche es einfach mal mit farbnamen dazustellen was ich machen mööchte:
(bzw. haben möchte*G*)
Ich möchte die Komplete 256 farbpaltte dastellen genau wie im Delphi Zeichenprogramm nur:
ich würde gerne die dunkeln von den Hellen farben sortieren so das ich entscheiden kann welche oben bzw. unten sein sollen. Und von jeder farbe sollen 3-4 farb töne da sein.

!!! Vielen Dank für eure mühe !!!
:-D :-D

Muetze1 13. Nov 2005 07:34

Re: Farbpaltte erstellen mit 255 farben
 
Zitat:

Zitat von mare_crisium
farbe:=rot+256*gruen+256*256*blau

*schüttel*
Vorschlag:
Delphi-Quellcode:
farbe := RGB(rot, gruen, blau);

mare_crisium 18. Nov 2005 21:21

Re: Farbpaltte erstellen mit 255 farben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Mimi,

um das hinzukriegen, was Du willst, muss man zwei Fragen beantworten:
1. Wie suche ich unter den 16 Millionen Farbtönen, die man mit 8 bit pro Farbe darstellen kann, die aus, die Du haben willst.
2. Wie zeige ich sie so an, dass man jede beliebige davon mit der Maus auswählen kann.

Die zweite Frage ist am Einfachsten zu lösen: Am Besten mit einem Tdrawgrid.

Die erste ist echt knifflig, weil es
1. keine einfache Möglichkeit gibt, alle Farbtöne in einer Ebene darzustellen
2. nichts so stark von der Persönlichkeit geprägt ist, die die Vorliebe oder Abneigung gegen bestimmte Farben. Farben ohne Emotionen anzugucken ist fast unmöglich.
3. das Auge ist nicht so unfehlbar, wie es uns immer weismachen will. Wenn Du die angehängte Unit zum Laufen bringst, wirst Du 255 Quadrate sehen, die jedes mit einem einheitlichen Farbton ausgefüllt sind. Es sieht aber so aus, als hätten sie einen anders gefärbten Rand. Stimmt nicht: Das Auge verstärkt Kontraste und lässt uns einen Farbsaum erscheinen wo gar keiner ist.

Guck' Dir doch mal diese unit hier an. Die fertige .exe-Datei habe ich auch angehängt. Wenn alles hinhaut, kannst Du auf jedes Quadrat des TdrawGrid klicken und siehst dann die ausgewählte Farbe in einem Panel darunter.

Für Muetze1 ist auch was dabei.

mare_crisium

mimi 19. Nov 2005 18:18

Re: Farbpaltte erstellen mit 255 farben
 
Vielen Dank für eure Hilfe. Ich bin gerade am überlegen ob ich nicht die eine Farbpallete nemhen soll oder ob ich es nicht selbst versuche dieses ziel zu erreichen.

Kennst du/ihr eine deutsche Hompage die sich mit Farberechnungen ausskennt ?

mare_crisium 20. Nov 2005 02:41

Re: Farbpaltte erstellen mit 255 farben
 
Mimi,

ich finde, Du bist wirklich mutig und zäh, weil Du Dich nicht einfach zufrieden gibst, sondern das verfolgst, was Du wirklich willst.

Die beste deutsche Website, die ich bisher zu diesem Thema finden konnte, ist Wikipedia mit dem Suchwort "Farbraum". Von da aus kannst Du dann weiterschürfen. Aber scheu' Dich nicht im Forum weiter zu fragen, wenn Du nicht so weit kommst, wie Du willst.

mare_crisium

mimi 20. Nov 2005 05:50

Re: Farbpaltte erstellen mit 255 farben
 
Zitat:

ich finde, Du bist wirklich mutig und zäh, weil Du Dich nicht einfach zufrieden gibst, sondern das verfolgst, was Du wirklich willst.
danke, mal schauen ob es was hilft.

mimi 20. Nov 2005 06:50

Re: Farbpaltte erstellen mit 255 farben
 
nach langen suchen habe ich mich entschieden die farben aus einer Liste zu laden:
http://www.webmastermarkt.de/farbtabelle.html
dort findes du die englischen und deutschen farbnamen und den farbwert in einer tabbele aufgelistet.

himitsu 20. Nov 2005 07:16

Re: Farbpaltte erstellen mit 255 farben
 
Liste der Anhänge anzeigen (Anzahl: 3)
Das mit dem Array (Farbpalette) wäre natürlich noch 'ne Möglichkeit - statt die Farben zu berechnen diese einfach aus dem Array verwenden. (bei so "wenigen" Farben wäre dieses noch vertretbar ... 256 * 4 = 1 KB)

Und der Vorteil dabi wäre auch noch, daß du die Farbwrte dann völlig frei positionieren kannst. (ohne eine passende Formel zu finden)
[add] also passend zu deiner Liste
[add2] dort hast du auch noch einige (Browser)Farbpaletten und sogar sortierter

Delphi-Quellcode:
Const ColorArray: Array[0..255] of TColor = ($000000, ... , $FFFFFF);



Oder du muß es denn unbedingt eine Farbpalette mit festen Werten sein? (siehe Anhänge)

mimi 20. Nov 2005 10:44

Re: Farbpaltte erstellen mit 255 farben
 
danke für den link. die beispiele waren für mich nicht
allerdink habe ich ein problem mit dem umwanden von #00FFFF nach einen intereger.
habe schon gesucht und bin dabei auf folgende funktion gestoßen:
Delphi-Quellcode:
function HexToColor(St: String): TColor;
begin
  Result := TColor(StrToInt(St));
end;
aber irgenwie es kommt eine fehlermeldung das der hex colorer wert kein gültiger interger sei :(

ich werde mal dein link testen.

turboPASCAL 20. Nov 2005 10:48

Re: Farbpaltte erstellen mit 255 farben
 
Ersetze das # durch $. (#00FFFFFF zu $00FFFFFF)

zB.:
Delphi-Quellcode:
function HexToColor(St: String): TColor;
begin
  if St[1] = '#' then St[1] := '$';
  Result := TColor(StrToInt(St));
end;

mimi 20. Nov 2005 10:52

Re: Farbpaltte erstellen mit 255 farben
 
Besten Dank an alle: hat geklaptt ich werde die datei noch auf den neuen link umstellten und dann ist diese funktion fertig *G*

mimi 20. Nov 2005 10:55

Re: Farbpaltte erstellen mit 255 farben
 
anmerkung:
es sind nur 140 Farben statt 256 farben aber das ist ersteinmal nicht so wichtig troztdem vielen dank !


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