Skip to content

Instantly share code, notes, and snippets.

@spiritedRunning
Last active August 18, 2021 07:57
Show Gist options
  • Save spiritedRunning/11ed785ac595fdd1298bd049d79f88f9 to your computer and use it in GitHub Desktop.
Save spiritedRunning/11ed785ac595fdd1298bd049d79f88f9 to your computer and use it in GitHub Desktop.
彩虹色多色阶热力图温度映射
private float a, b, c, d;
private int red, green, blue;
private static final float minTemp = 20.0f;
private static final float maxTemp = 40.0f;
private void setAbcd() {
a = minTemp + (maxTemp - minTemp) * 0.2121f;
b = minTemp + (maxTemp - minTemp) * 0.3182f;
c = minTemp + (maxTemp - minTemp) * 0.4242f;
d = minTemp + (maxTemp - minTemp) * 0.8182f;
}
private int constrain(double amt, int low, int high) {
return (amt) < (low) ? (low) : (int) ((amt) > (high) ? (high) : (amt));
}
private int getColor565(int red, int green, int blue) {
return ((red & 0xF8) << 8) | ((green & 0xFC) << 3) | ((blue & 0xFF) >> 3);
}
private int TempToColor(double val) {
red = constrain(255.0f / (c - b) * val - ((b * 255.0f) / (c - b)), 0, 255);
if ((val > minTemp) & (val < a)) {
green = constrain(255.0f / (a - minTemp) * val - (255.0f * minTemp) / (a - minTemp), 0, 255);
} else if ((val >= a) & (val <= c)) {
green = 255;
} else if (val > c) {
green = constrain(255.0f / (c - d) * val - (d * 255.0f) / (c - d), 0, 255);
} else if ((val > d) | (val < a)) {
green = 0;
}
if (val <= b) {
blue = constrain(255.0f / (a - b) * val - (255.0f * b) / (a - b), 0, 255);
} else if ((val > b) & (val <= d)) {
blue = 0;
} else if (val > d) {
blue = constrain(240.0f / (maxTemp - d) * val - (d * 240.0f) / (maxTemp - d), 0, 240);
}
//Log.i(TAG, "red= " + red + ", green = " + green + ", blue = " + blue);
// use the displays color mapping function to get 5-6-5 color palet (R=5 bits, G=6 bits, B-5 bits)
int color = getColor565(red, green, blue);
return RGB565ToARGB(color);
}
private int RGB565ToARGB(int aPixel) {
int r = ((aPixel & 0xF800) >>> 8) & 0xFF;
int g = ((aPixel & 0x07E0) >>> 3) & 0xFF;
int b = ((aPixel & 0x001F) << 3) & 0xFF;
return 0xff000000 | (r << 16) | (g << 8) | b;
}
@spiritedRunning
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment