색온도에서 RGB(sRGB)로 변환
[추기] 썼어!이쪽 기사예요.→ 색온도에서 RGB(sRGB)로 변환(완성판)
뭐 해요?
너는 이런 물건을 본 적이 있니?색온도에 해당하는 sRGB 값을 계산하는 코드를 구현합니다.
처리의 주요 내용
코드는 당연히 자바죠.
왜냐하면 너도
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;
// 上のコメントアウト部分は、今回のシチュエーションでは分岐を省略して
// 以下のようにできます
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;
}
Reference
이 문제에 관하여(색온도에서 RGB(sRGB)로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gilbert_yumu/items/bd26542a80f0536c4d92텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)