Ich habe es zur Hälfte geschrieben, aber die HTML-Tabelle funktioniert nicht gut. Weitere Informationen finden Sie im Hatena-Blog. [Ergänzung] Ich habe es geschrieben! Dieser Beitrag. → Von Farbtemperatur in RGB (sRGB) konvertieren (fertige Version)
Hast du das jemals gesehen? Implementieren Sie den Code, um den sRGB-Wert zu ermitteln, der der Farbtemperatur entspricht.
Weil du auch (unten abgekürzt)
public static int daylight(double tcp) {
double x, y, z, r, g, b;
if (tcp < 4000.0) {
throw new IllegalArgumentException();
}
else if (tcp <= 7000.0) {
x = -4.6070E9 / (tcp * tcp * tcp) + 2.9678E6 / (tcp * tcp) + 0.09911E3 / tcp + 0.244063;
}
else if (tcp <= 25000.0) {
x = -2.0064E9 / (tcp * tcp * tcp) + 1.9018E6 / (tcp * tcp) + 0.24748E3 / tcp + 0.237040;
}
else {
throw new IllegalArgumentException();
}
y = -3.000 * (x * x) + 2.870 * x - 0.275;
z = 1.0 - x - y;
r = 3.2406 * x - 1.5372 * y - 0.4986 * z;
g = -0.9689 * x + 1.8758 * y + 0.0415 * z;
b = 0.0557 * x - 0.2040 * y + 1.0570 * z;
// double maxRgb = Math.max(Math.max(r, g), b);
// r /= maxRgb;
// g /= maxRgb;
// b /= maxRgb;
// r = (r <= 0.0031308) ? 12.92 * r : 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055;
// g = (g <= 0.0031308) ? 12.92 * g : 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055;
// b = (b <= 0.0031308) ? 12.92 * b : 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055;
//Der auskommentierte Teil oben lässt den Zweig in dieser Situation weg
//Sie können Folgendes tun
double maxRgb = Math.max(Math.max(r, g), b);
r = 1.055 * Math.pow(r / maxRgb, 1.0 / 2.4) - 0.055;
g = 1.055 * Math.pow(g / maxRgb, 1.0 / 2.4) - 0.055;
b = 1.055 * Math.pow(b / maxRgb, 1.0 / 2.4) - 0.055;
int rr = (int) (255.0 * r + 0.5);
int gg = (int) (255.0 * g + 0.5);
int bb = (int) (255.0 * b + 0.5);
return 0xFF000000 | (rr << 16) | (gg << 8) | bb;
}
Recommended Posts