RGB↔HSL変換と色相・彩度補正
詳しくはこちら。
手っ取り早く使いたい方は以下。プログラムもどき記法です。
- R, G, B ∈ [0, 1]
- H ∈ [0, 1)
- S, L ∈ [0, 1]
RGB→HSL
sub rgb_to_hsl(R, G, B) { M = max(R, G, B); m = min(R, G, B); C = M - m; H = undefined; S = 0; L = (M + m) / 2; if (C != 0) { if (L <= 0.5) { S = C / (2*L); } else { S = C / (2 - 2*L); } if (R == M) { H = (G - B) / C; if (H < 0) { H += 6; } } else if (G == M) { H = (B - R) / C + 2; } else if (B == M) { H = (R - G) / C + 4; } H /= 6; } return (H, S, L); }
HSL→RGB
sub hsl_to_rgb(H, S, L) { R, G, B; C, m; if (S == 0) { R = G = B = L; } else { if (L <= 0.5) { C = 2*L * S; } else { C = (2 - 2*L) * S; } m = L - C/2; R = hsl_value(6*H + 2, C, m); G = hsl_value(6*H, C, m); B = hsl_value(6*H - 2, C, m); } } sub hsl_value(hh, C, m) { val; if (hh < 0) { hh += 6; } else if (hh >= 6) { hh -= 6; } if (hh < 1) { val = C * hh; } else if (hh < 3) { val = C; } else if (hh < 4) { val = C * (4 - hh); } else { val = 0; } val += m; return val; }