diff --git a/hsv2rgbw.py b/hsv2rgbw.py new file mode 100644 index 0000000..5d510ad --- /dev/null +++ b/hsv2rgbw.py @@ -0,0 +1,43 @@ +import numpy as np + +# h = 0..359 +# s = 0..255 +# v = 0..511 (values above 255 add white channel) +def hsv2rgbw(h, s, v): + + h %= 360 + + v_ = min(255, v) + + # C = 0..255 + C = (v_ * s) // 256 + + h_ = 128 * h // 60 + + # X = 0..255 + X = C * (128 - abs(h_ % 256 - 128)) // 128 + + if h < 60: + r, g, b = C, X, 0 + elif h < 120: + r, g, b = X, C, 0 + elif h < 180: + r, g, b = 0, C, X + elif h < 240: + r, g, b = 0, X, C + elif h < 300: + r, g, b = X, 0, C + else: + r, g, b = C, 0, X + + m = v_ - C + r += m + g += m + b += m + + if v >= 256: + w = v - 255 + else: + w = 0 + + return np.array([r, g, b, w])