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