Autor |
Beitrag |
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Di 26.07.05 18:07
Hi, kennt jemand ein besseren Algorithmus mit dem man einige Farben im bestimmten Helligkeitsbereich
erzeugen kann? Ich habe hiermit versucht und es sind alles Graue Farben! Ich möchte eigentlich eine
schön bunt gemischte Pallete haben!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| var FColor array[0..25] or TColor;
procedure TDBBuilderFrame.InitColorArray; var I, R, G, B : Integer; begin R := 150; G := 150; B := 150; I := 0; while R <= 200 do begin while G <= 200 do begin while B <= 200 do begin FColor[I] := RGB(R, G, B); Inc(I); Inc(B, 2); end; Inc(G,2); end; Inc(R, 2); end; end; |
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 26.07.05 18:39
Richtig gut kommentiert der Code  Was soll der machen? Farben erzeugen? Nach welchen Kriterien (was verstehst du unter einem "Helligkeitsbereich")? Dass du nur Grautöne erhältst, ist klar: R, B und G haben immer den gleichen Wert -> Graustufenpallette.
AXMD
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Di 26.07.05 19:13
Schau dir das HSL Farbmodell an...
Ach übrigens:
"...or TColor"???
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Di 02.08.05 08:17
Hey Jungs hier so sieht der Code jetzt aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
| procedure TColorMan.CreateManyColors(const Value: Integer); const Senken = 1; Steigen = 2; Stehen = 3; UGrenz = 15; OGrenz = 240; var R, G, B, C, I : Integer; RT, GT, BT : Byte; R0, R1, G0, G1, B0, B1 : Boolean; begin FColorCount := Value; SetLength(FColors, Value);
R := OGrenz; G := UGrenz; B := UGrenz; RT := Senken; GT := Steigen; BT := Stehen;
C := ((OGrenz - UGrenz) div (Value-1)) * 5; for I := 0 to Value - 1 do begin FColors[I] := RGB(R, G, B);
case RT of Senken: Dec(R, C); Steigen: Inc(R, C); Stehen: GT := Senken; end;
case GT of Senken: Dec(G, C); Steigen: Inc(G, C); Stehen: end;
case BT of Senken: Dec(B, C); Steigen: Inc(B, C); Stehen: end;
R1 := R >= OGrenz; R0 := R <= UGrenz;
G1 := G >= OGrenz; G0 := G <= UGrenz;
B1 := B >= OGrenz; B0 := B <= UGrenz;
if(R0) and (G1) and (B0)then begin RT := Steigen; GT := Stehen; BT := Stehen; end;
if(R1) and (G1) and (B0)then begin RT := Stehen; GT := Senken; BT := Steigen; end;
if(R1) and (G0) and (B1)then begin RT := Senken; GT := Stehen; BT := Stehen; end;
if(R0) and (G0) and (B1)then begin RT := Stehen; GT := Steigen; BT := Senken; end;
end; end; |
Vieleicht hätte einer die Idee wie man das hier noch verbessern könnte?
Da sind nämlich zu viele Grüntöne hintereinander!
Im Anhang könnt Ihr sehen welche Farben es erzeugt!
Einloggen, um Attachments anzusehen!
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 02.08.05 08:41
Verrate uns erstmal was die Prozedur machen soll. Soll di9e eine Fareb aufhellen? Oder was sonst? Solange wir die Infos nicht haben können wir dir nicht helfen.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Di 02.08.05 09:23
Heiko hat folgendes geschrieben: | Verrate uns erstmal was die Prozedur machen soll. Soll di9e eine Fareb aufhellen? Oder was sonst? Solange wir die Infos nicht haben können wir dir nicht helfen. |
Eine bunte Farbpalette erzeugen die gut sichtbar sind auf Weiß in meinem Falle!
Also kurz gesagt die Farben die Ihr sehen könnt die werden mit dieser procedur
ertzeugt un im array der größe die ich der procedure als parameter übergebe
abgelegt!
Also mein Algorithmus gibt zu viele Grüntöne an einer stelle aus, wenn Ihr
ne Idee habt wie ich noch mehr bunte Farben da rausbekomme? Ich denke das
Spektrum ist doch größer?
Also ich habe zuerst Rot mit 240 initialisiert, grün und blau mit 15 dann
übergebe ich der procedur die anzahl der Farben die erzeugt werden sollen
das wird dann in Schritte aufgeteilt mit denen die Farben als Binärcode
abgebildet die Farben nacheinander runter und hochgefahren werden um
alle Bitcombinationen zu bekommen! Wie mein Code schon aussagt
R0, R1, G0, G1, B0, B1;
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Di 02.08.05 21:49
Der Ausdruck "bunt" ist nicht gerade einer von den Worten, die sich klar und eindeutig definieren lassen. Was du meinst, ist sicherlich, dass du gern verschiedene kräftige, satte Farben in deiner Palette haben möchtest.
Wie DaRkFiRe schon sagte: Das HLS-Farbmodell ist dafür ein sehr guter Ansatz: Man wähle eine hohe Sättigung (S = Saturation), eine mittlere Helligkeit (L = Luminance), und lasse den Farbton (H = Hue) verändern. Eigentlich ist das ein Farbkreis zwischen 0° und 360°, aber weil das über den Wertebereich von "Byte" hinausgeht, werden Werte zwischen 0 und 240 zugelassen, also eine Skalierung von 2/3.
H = 0: rot
H = 40: gelb
H = 80: grün
H = 120: blaugrün
H = 160: blau
H = 200: violett
H = 240: rot
Und dafür gibt es die "function ColorHLSToRGB(Hue, Luminance, Saturation: Word): TColorRef;" in der Unit "GraphUtil".
Viel Spaß!
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 03.08.05 09:29
LigH hat folgendes geschrieben: | Der Ausdruck "bunt" ist nicht gerade einer von den Worten, die sich klar und eindeutig definieren lassen. Was du meinst, ist sicherlich, dass du gern verschiedene kräftige, satte Farben in deiner Palette haben möchtest.
Wie DaRkFiRe schon sagte: Das HLS-Farbmodell ist dafür ein sehr guter Ansatz: Man wähle eine hohe Sättigung (S = Saturation), eine mittlere Helligkeit (L = Luminance), und lasse den Farbton (H = Hue) verändern. Eigentlich ist das ein Farbkreis zwischen 0° und 360°, aber weil das über den Wertebereich von "Byte" hinausgeht, werden Werte zwischen 0 und 240 zugelassen, also eine Skalierung von 2/3.
H = 0: rot
H = 40: gelb
H = 80: grün
H = 120: blaugrün
H = 160: blau
H = 200: violett
H = 240: rot
Und dafür gibt es die "function ColorHLSToRGB(Hue, Luminance, Saturation: Word): TColorRef;" in der Unit "GraphUtil".
Viel Spaß! |
Hey Junior-Member und mehr Ahnung als ich? Klasse!  Aber in Wircklichkeit wahrscheinlich kein Junior-Member! Hmm...
Vielen Dank 
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 03.08.05 09:59
[OT] Es soll ja Leute geben, die haben sich schon vor ihrem Beitritt ins Delphi-Forum mit diversen Dingen beschäftigt, die mit Programmieren zu tun haben. Die Anzahl der Beiträge sagt also nicht unbedingt etwas über den Wissensstand des Verfassers ab.
Aber das ändert sich ja sowieso bald
[/OT]
_________________ We are, we were and will not be.
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Mi 03.08.05 12:05
Na ja - Dipl.-Inform. (FH), zwischendurch auch schon mal Software-Entwickler gewesen. Wird heute aber immer schwerer, noch was zu finden, wenn man nicht wirklich alles kann. Und man wird teilweise nur noch ausgenutzt: Zuletzt war ich (zumindest was den Code angeht) fast ein 1-Mann-Team, 50-Stunden-Woche ohne Überstunden-Ausgleich, und trotzdem der "Chef" immer unzufrieden. So siehste mit 30 schon ganz alt aus...
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 03.08.05 12:34
LigH hat folgendes geschrieben: | Na ja - Dipl.-Inform. (FH), zwischendurch auch schon mal Software-Entwickler gewesen. Wird heute aber immer schwerer, noch was zu finden, wenn man nicht wirklich alles kann. Und man wird teilweise nur noch ausgenutzt: Zuletzt war ich (zumindest was den Code angeht) fast ein 1-Mann-Team, 50-Stunden-Woche ohne Überstunden-Ausgleich, und trotzdem der "Chef" immer unzufrieden. So siehste mit 30 schon ganz alt aus... |
Was ist wenn du z.B. gute Ideen hast und die privat umsetzen kannst, demzufolge auch gut verkaufen kannst (alles eine Frage einer guten Idee)
und aber nicht das Risiko eingehen willst sich in die Selbständigkeit stürzen! Suchst also einen Chef der dich als sozusagen Subunternehmer
einstellt (weil er ja nur Vorteile dadurch hät und etwas dazuverdienen kann) der Chef übernimmt für dich dann die Rentenbeiträge
(apropo Rentenversicherung es heist zwar ...versicherung aber ist es nicht! Ist nur ein Rentenbeitrag in dem Sinne "aber darüber kann man ja
in einem anderen Thread diskutieren) und Krankenversicherung etc. und du bist dein eigener Chef und kannst deine eigene Ideen umsetzen! 
|
|
|