Hy zusammen, entschuldige für die schlechten Betreff mir ist kein kurzer eingefallen. Ich programmiere gerade an einer Temperatureinheit (MCP9700) für meinen Balkon die Daten werden per RFM12B gesendet und auf einem Display 1,8" angezeigt. Alles klappt auch soweit. Nur dann kamm mir die Idee die Hintergrundfrabe entsprechend der Temperatur zuzeigen, ähnlich wie bei einer Wärmebildkamera. Das Display hat 65K Farben. #define ST7735_BLACK 0x0000 #define ST7735_RED 0x001F #define ST7735_BLUE 0xF800 #define ST7735_GREEN 0x07E0 #define ST7735_CYAN 0x07FF #define ST7735_MAGENTA 0xF81F #define ST7735_YELLOW 0xFFE0 #define ST7735_WHITE 0xFFFF Nur ich stehe voll auf dem Schlauch wie ich die Temperatur in eine passende Farbe "umrechnen" soll. Hoffe jemand kann mir ein tip geben, wo ich anfangen soll. MFG Rolf
hsv-transformation und am hue-wert drehen ist ein erster schritt. Damit wanderst du aber nur durch den Regenbogen. Auch andere Transformationen sind denkbar. Da kann man sich auch selbst was bastlen. Im anschluss musst du von RGB auf diesen 16Bit-Wert umrechnen. Dazu kann ich nicht viel sagen.
Erst mal damit, dass du entschlüsselst, wie sich die Zahlen in den #define zusammensetzen. Da stecken garantiert R(ot), G(rün), B(lau) Werte dahinter. Dann denkst du dir zb eine Fomel aus, wie du aus der Temperatur auf einen Wert am Farbkreis kommst, und dann eine Umrechnung vom Farbkreis auf die RGB Werte. Die beiden Umrechnungen kann man auch zusammenfassen und vereinfachen. Aber solange du nicht weißt, wie sich die Zahlen da oben zusammensetzen, WARUM also Gelb den Wert 0xFFE0 hat, solange ist das sinnlos. Hinweis: Gelb ist eine Mischfarbe, die entsteht, wenn Rot 'voll aufgedreht' ist, Grün 'voll aufgedreht' und Blau keinen Anteil hat. Würden die Farben Rot, Grün und Blau jeweils Werte von 0 bis 255 annehmen könnnen, dann wäre Gelb: Rot 255, Grün 255, Blau 0
:
Bearbeitet durch User
Mir sind deine Farben wurscht, wirst schon wissen, warum du die gew"ahlt hast. Nennen wir sie einfach mal F[0]..F[7], nachdem Du sie in ein Array gesteckt hast ;-) F[0] = Farbe der Minimaltemperatur T0 F[7] = Farbe der Maximaltemperatur T7 F[i] ab Temperatur T[i] := T0 + i*(T7-T0)/7 Nun sei eine Temperator T gemessen. => Schauen in welchem Intervall i die Temperator liegt, d.h. T[i]<=T, i maximal. Und dann lineare Interpolation zwischen T[i] und T[i+1]: F = ( (T-T[i])*F[i+1] + (T[i+1]-T)*F[i] ) / (T[i+1]-T[i]) Und halt eventuelle Grenzen der Arrays beachten. EDIT: Ups, da war ein Fehlerteufelchen im Nenner.
:
Bearbeitet durch User
Die Interpolation muss aber für jede Komponente (R, G, B) getrennt gemacht werden.
Du musst bei den Interpolationen auch die Wertebereiche für die drei Grundfarben berücksichtigen. Da die 16 Bit nicht in drei gleichgroße Gruppen aufgetailt werden können, sind die Wertebereiche unterschiedlich: Rot 0..31 -> 5 Bit Grün 0..63 -> 6 Bit Blau 0..31 -> 5 Bit —————— 16 Bit Bei deinen Defines sind übrigens die Farbwerte für rot und blau vertauscht.
Danke für die antworten, Wie sich die Farben mischen weiss ich (Schulwissen :D), aber wie die sich in form von Zahlen zusammen setzten ist etwas unklar (bei RGB mit je 8 Bit zb). Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat.
Farb_Rolf schrieb: > Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat. Ich meine das für mich kein zusammenhang besteht.
Farb_Rolf schrieb: > Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat. Zumindest keinen einheitlichen - geht man nach glühendem Metall, so gibt es da die Farbfolge Schwarz - Dunkelrot - Hellrot - Gelb - Weiss. Das wird oft verwendet weil eingängig. Ein Astronom sieht das möglicherweise etwas anders: da gilt auch rot - gelb - weiss, aber blaue Sterne sind noch heisser. Was du erstellen willst, heisst aber nicht umsonst "Falschfarbenbild". Gruss Reinhard
ist zwar java, aber lässt sich ja adaptieren farbwerte werden über einen Bereich verteilt und die zwischenwerte interpoliert beispiel für eine Farbskala steht in der txt, das format ist Index(0-255), R, G, B grüße Phillip
Farb_Rolf schrieb: > Farb_Rolf schrieb: >> Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat. > > Ich meine das für mich kein zusammenhang besteht. Nach Beobachtungen von Wahrnehmungspsychologen (und ihren Vorgängern in den letzten ca. 3000 Jahren Menschheitsgeschichte) gibt es einen. Die Begrifflichkeiten um "warme" und "kalte" Farben sind ein Hinweis dafür. Sehr weit verbreitet ist, die Sachen mit Blau und Rot darzustellen. Das findet man an Heizungsthermostaten, Wasserhähnen usw. Und jeder Mensch weltweit versteht das ziemlich unmittelbar (was es den Herstellern dieser Gerätschaften erspart, dutzende oder gar hunderte von lokalisierten Varianten herstellen zu müssen). Also nimmst du für die Extrempunkte ein reines Rot oder Blau. Für jeden konkreten Wert interpolierst du dann einmal linear für eine der beiden Farbkomponenten und füllst die andere Farbkompenente mit dem auf, was zu 100% des Maximums fehlt. Fertich. Damit's nicht gar so grell wirkt (insbesondere die ultrahäßlichen lila Zwischentöne) kann man die Farbsättigung zurücknehmen. Das funktioniert im Prinzip genauso wie oben beschrieben, bloß daß man die Interpolation nicht von 0..100% macht, sondern von z.B. 0..20%. Auch das Auffüllen der anderen Farbe passiert dann nur bis 20%. Die (konstant) fehlenden 80% verteilt man zu je einem Drittel über alle drei Farbkanäle durch simple Addition zur Entwurfszeit berechenbarer Konstanten. Das geht mit einer einzigen Addition! Schon hat man dasselbe Farbspiel, bloß in deutlich erträglicheren Pastellfarben mit einer einzigen Addition als Mehraufwand.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.