2017-01-22 170 views
1

我周围环顾四周,试图找到一种在Python中将颜色淡入一种颜色的方法。我发现的大多数示例通常都是特定于某个设备或其他语言的翻译不好的。Python - RGB LED颜色褪色

我目前有一段修改过的代码,用于创建呼吸效果,例如从0到255的效果非常好。我现在所设置的颜色是绿色,如from。闪烁;然后设置to颜色:

def colorFade(strip, colorFrom, colorTo, wait_ms=20, steps=10): 
    steps = 200 

    step_R = int(colorTo[0])/steps 
    step_G = int(colorTo[1])/steps 
    step_B = int(colorTo[2])/steps 
    r = int(colorFrom[0]) 
    g = int(colorFrom[1]) 
    b = int(colorFrom[2]) 

    for x in range(steps): 
     c = Color(int(r), int(g), int(b)) 
     for i in range(strip.numPixels()): 
      strip.setPixelColor(i, c) 
     strip.show() 
     time.sleep(wait_ms/1000.0) 
     r += step_R 
     g += step_G 
     b += step_B 

调用代码:

colorFade(strip, [200, 0, 0], [0, 200, 0]) 
+2

用''steps = 200.0''试一下 - 你可能是由于整数除法错误地计算了step_R/G/B变量。 – jasonharper

+0

很难处理一个不断变化的问题。也许需要一些时间,并做* *编辑? –

+0

当前写入的方式是在函数的第一行分配'steps' arg参数。 –

回答

2

这听起来像你想在colorFrom开始,逐步步骤 沿着一条直线,直到你达到colorTo

这段代码确实是在开始colorFrom,然后增加当前 颜色,如果你是从迈向colorTo

很难确定没有完整的代码,但它看起来像你应该 替换此:

step_R = int(colorTo[0])/steps 
step_G = int(colorTo[1])/steps 
step_B = int(colorTo[2])/steps 

与此:

step_R = (colorTo[0] - colorFrom[0])/steps 
step_G = (colorTo[1] - colorFrom[1])/steps 
step_B = (colorTo[2] - colorFrom[2])/steps 

编辑:而且,正如jasonharper指出的那样,你可能正在做整数除法。不清楚你的类型是什么。如果你使用Python 2,/是整数除法。在Python 3中,它是浮点。

+0

不错,谢谢。我不得不将步骤保留为int,因为我使用的库不支持颜色的浮点数。它工作得很好,也很顺利 – Timmo

+0

好吧,你可以在内部使它们成为浮点,并且在设置颜色时(代码看起来像它已经在做),只需转换为“int”。可能会更顺利一点。 –