Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Allgorithmus RGB Colors erzeugen funzt nicht!
JRegier - Di 26.07.05 18:07
Titel: Allgorithmus RGB Colors erzeugen funzt nicht!
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 - Di 26.07.05 18:39
Richtig gut kommentiert der Code :gruebel: 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 - Di 26.07.05 19:13
Schau dir das HSL Farbmodell an...
Ach übrigens:
"...or TColor"???
JRegier - Di 02.08.05 08:17
Hey Jungs hier so sieht der Code jetzt aus:
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: 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!
Heiko - 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 - 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 - 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 - 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! :wink: Aber in Wircklichkeit wahrscheinlich kein Junior-Member! Hmm...
Vielen Dank :!:
Gausi - 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 :mrgreen:
[/OT]
LigH - 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 - 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! :idea:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!