Added function to convert HSV to RGBW
This commit is contained in:
parent
d739831d9e
commit
8e72cce8cc
43
hsv2rgbw.py
Normal file
43
hsv2rgbw.py
Normal file
|
@ -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])
|
Loading…
Reference in a new issue