Poodletooth-iLand/otp/speedchat/ColorSpace.py

61 lines
1.4 KiB
Python

import math
def rgb2hsv(r, g, b):
_min = float(min(r, g, b))
_max = float(max(r, g, b))
v = _max
delta = _max - _min
if delta != 0.0:
s = delta / _max
else:
s = 0.0
h = -1.0
return (h, s, v)
if r == _max:
h = (g - b) / delta
elif g == _max:
h = 2.0 + (b - r) / delta
else:
h = 4.0 + (r - g) / delta
h *= 60.0
if h < 0.0:
h += 360.0
return (h, s, v)
def hsv2rgb(h, s, v):
if s == 0.0:
return (v, v, v)
h %= 360.0
h /= 60.0
i = int(math.floor(h))
f = h - i
p = v * (1.0 - s)
q = v * (1.0 - s * f)
t = v * (1.0 - s * (1.0 - f))
if i == 0:
return (v, t, p)
elif i == 1:
return (q, v, p)
elif i == 2:
return (p, v, t)
elif i == 3:
return (p, q, v)
elif i == 4:
return (t, p, v)
else:
return (v, p, q)
def rgb2yuv(r, g, b):
y = 0.299 * r + 0.587 * g + 0.114 * b
u = -.169 * r - 0.331 * g + 0.5 * b + 0.5
v = 0.5 * r - 0.419 * g - 0.081 * b + 0.5
return tuple(map(lambda x: min(max(x, 0), 1), (y, u, v)))
def yuv2rgb(y, u, v):
r = y - 0.0009267 * (u - 0.5) + 1.4016868 * (v - 0.5)
g = y - 0.3436954 * (u - 0.5) - 0.714169 * (v - 0.5)
b = y + 1.7721604 * (u - 0.5) + 0.0009902 * (v - 0.5)
return tuple(map(lambda x: min(max(x, 0), 1), (r, g, b)))