Hallo liebe Python-Gemeinde,
eine ganz knappe Frage:
Ich möchte in PhotoImage.put eine Farbangabe machen, aber weder in der üblichen Darstellung "#FF0033" noch mit vordefinierten Schlüsselwörtern.
Am günstigsten für mich wäre eine Farbangabe durch eine ganze Zahl in einem bestimmten Bereich (z.B. von 0 bis 255).
Ist das möglich?
Viele Grüße,
muhazz
mögliche Formate der Farbangaben
Du kannst die ganze Zahl doch vorher durch eine "Tabelle schicken" (Liste oder Dictionary) die diese Zahl auf eine Farbe abbildet wie sie von `Tkinter` erwartet wird.
Ich sehe das Problem noch nicht.
Geklärt werden müsste doch nur, was eine Farbangabe als ganzzahliger Wert zwischen 0 und 255 bedeuten soll. Je nach dem musst du dir - wie schon vorgeschlagen - das fest kodieren und jeder Zahl eine bestimmte Farbe zuordnen, oder aber, einzelne Bits in der Zahl haben z.B. eine bestimmte Bedeutung und es lässt sich mittels einer (selbst zu schreibenden Funktion) entsprechend auf eine RGB-Angabe transformieren.
Geklärt werden müsste doch nur, was eine Farbangabe als ganzzahliger Wert zwischen 0 und 255 bedeuten soll. Je nach dem musst du dir - wie schon vorgeschlagen - das fest kodieren und jeder Zahl eine bestimmte Farbe zuordnen, oder aber, einzelne Bits in der Zahl haben z.B. eine bestimmte Bedeutung und es lässt sich mittels einer (selbst zu schreibenden Funktion) entsprechend auf eine RGB-Angabe transformieren.
Die übliche Darstellung ('#FF0033') ist doch auch nur eine Zahl im Hexadezimalsystem.
Du kannst dir einfach eine andere Darstellung basteln in der du auf das für uns übliche Zehnersystem zurückgreifst, indem du für Rot, Grün bzw. Blau Werte zwischen 0 und 999 zulässt. Die Zahl, die eine Farbe repräsentiert kannst du dann mit 1.000.000 * R + 1.000 * G + B errechnen.
Grau wäre dann '500500500', grün '999000' und dunkelrot '200000000'.
Um aus diesen Zahlen wieder die einzelnen Farbwerte zu extrahieren musst du nur den Modulo-Operator darauf anwenden.
Du kannst dir einfach eine andere Darstellung basteln in der du auf das für uns übliche Zehnersystem zurückgreifst, indem du für Rot, Grün bzw. Blau Werte zwischen 0 und 999 zulässt. Die Zahl, die eine Farbe repräsentiert kannst du dann mit 1.000.000 * R + 1.000 * G + B errechnen.
Grau wäre dann '500500500', grün '999000' und dunkelrot '200000000'.
Um aus diesen Zahlen wieder die einzelnen Farbwerte zu extrahieren musst du nur den Modulo-Operator darauf anwenden.
Die einzige Möglichkeit, die ich für mich gesehen habe, jedem Wert zwischen 0 und 255 eine Zahl zuzuordnen, ist das Anlegen eines Dictionaries, und zwar per Hand. Einen sinnvollen Algorithmus zur generierung der Farben konnte ich nicht finden.numerix hat geschrieben:Ich sehe das Problem noch nicht. [...] Je nach dem musst du dir - wie schon vorgeschlagen - das fest kodieren und jeder Zahl eine bestimmte Farbe zuordnen
Das war mir erstmal zu viel Tipparbeit, aber das ganze problem hat sich gelöst, da ich nicht so viel Farben benötige, wie ich anfangs gedacht hatte.
60 Einträge kann ich noch selbst tippen.
Auch wenn es sich sehr unelegant und stumpfsinnig anfühlt, war das glaube ich einfach die schnellste und praktischste Lösung für meine Situation.
Viele Grüße,
muhazz
@muhazz: Ich glaube ich hatte es hier an anderer Stelle schon einmal vorgeschlagen: Schau Dir an wie andere freie Software, zum Beispiel Gimp, mit Farbverläufen und -paletten umgeht. Man kann Farbverläufe anhand weniger Stützpunkte interpolieren oder auch schauen was es an fertigen Paletten im Netz als Daten gibt und die verwenden.