我正在努力创造一种随着时间的推移改变色调的固体,但我对如何做到这一点感到困惑。我目前正在尝试使用python中的Tkinter模块,但它只支持基于单词的十六进制和颜色。理想情况下,我可以调整HSV值,只需在色调中添加时间表达式,但考虑到Tkinter的颜色输入系统,似乎可能很难。我见过人们推荐使用colorsys模块,但显然处理起来很慢,我不知道它能够保持每秒移动色调~30次。
答案 0 :(得分:0)
您需要先将HSL转换为RGB的方法。这是我从SO上的另一个问题找到的解决方案:
def hueToRgb(p, q, t):
if t < 0: t += 1
if t > 1: t -= 1
if t < 1/6: return p + (q - p) * 6 * t
if t < 1/2: return q
else: return p + (q - p) * (2/3 - t) * 6 ift < 2/3 else p
def hslToRgb(h, s, l):
r = 0
g = 0
b = 0
if s == 0:
r = g = b = l
else:
q = l < 0.5 ? l * (1 + s) : l + s - l * s
p = 2 * l - q
r = hue2rgb(p, q, h + 1/3)
g = hue2rgb(p, q, h)
b = hue2rgb(p, q, h - 1/3)
return [round(r * 255), round(g * 255), round(b * 255)]
然后,要将HSL转换为有效的十六进制代码,请使用此代码(这是我自己的代码):
def hex(num):
if num == 0: return "#"
last = num % 16
return hex((num - last) / 16) + "0123456789abcdef"[int(last)]
因此,您将使用此代码获取HSL代码的十六进制字符串:
rgb = hslToRgb(h, s, l)
return hex(rgb[0] * 256 + rgb[1] * 16 + rgb[0])
(请更正任何python语法错误;我不用Python编程很多)