Princippet er simpelt nok, for du tildeler sådan set bare en farve til en temperatur, og så beregner du farvetonen ud fra temperatur. Hvis <= 30 er blå, 50 er orange >= 70 er rød, så er pseudokoden jo enkel nok:
temp = getTemp()
if (temp <= 30) setColor(blue)
else if (temp >= 70) setColor(red)
else if (temp <= 50) setColor(fadeColor(blue, orange, (temp - 30) / 20))
else setColor(fadeColor(orange, red, (temp - 50) / 20))
Funktionen setColor tager en 32bit RGB værdi, og formlen "(temp - X) / 20" omregner den procentuelle overskridelse af basistemperaturen som et tal mellem 0 og 1. Funktionen fadeColor burde være simpel nok:
byte fadeComp(byte from, byte to, float pct) {
return (byte)round( ((float)to - (float)from) * pct ) + from;
}
long fadeColor(long fromColor, long toColor, float pct) {
byte a = fadeComp(fromColor & 0xff, toColor & 0xff, pctAmount);
byte b = fadeComp((fromColor >> 8) & 0xff, (toColor >> 8) & 0xff, pctAmount);
byte c = fadeComp((fromColor >> 16) & 0xff, (toColor >> 16) & 0xff, pctAmount);
return (c << 16) | (b << 8) | a;
}
Det er skrevet fra hovedet, så kan ikke garantere at det virker uden justeringer :)
--
http://xlinx.dk[...] i7 2600K, 16GB PC3-12800, GA-X68XP-UD4 R1, GTX 560Ti HAWK, 250GB 840 EVO