2015-09-12 1 views
1

Я пытаюсь создать твердое тело, которое меняет оттенок с течением времени, но я немного смущен относительно того, как я должен это делать. В настоящее время я делаю попытку с модулем Tkinter в python, но он поддерживает только шестнадцатеричные и цвета, основанные на словах. В идеале я бы мог настроить значения HSV и просто добавить выражение времени к оттенку, но кажется, что это может быть сложно с учетом системы ввода цветов Tkinter. Я видел, как люди рекомендуют использовать модуль colorsys, но он медленно обрабатывается, и я не знаю, насколько он будет поддерживать смещение оттенка ~ 30 раз в секунду.Как я могу создать сплошной оттенок смены во времени в python?

+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) + "abcdef"[int(last)] 

Таким образом, вы будете использовать этот код, чтобы получить шестигранную строку для HSL кода:

rgb = hslToRgb(h, s, l) 
return hex(rgb[0] * 256 + rgb[1] * 16 + rgb[0]) 

(Пожалуйста, исправьте ошибки синтаксиса питона, я не программирую с Python много)

+0

Модуль 'colorsys' может выполнять преобразования в/из цветовых пространств RGB и оттенков. –