【问题标题】:Python - RGB LED Color FadingPython - RGB LED 褪色
【发布时间】:2017-01-23 00:57:24
【问题描述】:

我环顾四周,试图找到一种在 Python 中从一种颜色渐变到另一种颜色的方法。我发现的大多数示例通常都特定于设备或翻译不好的另一种语言。

我目前有一段修改过的代码,用于创建呼吸效果,例如从 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])

【问题讨论】:

  • 尝试steps = 200.0 - 由于整数除法,您可能错误地计算了 step_R/G/B 变量。
  • 很难处理一个不断变化的问题。也许需要一些时间并进行一个编辑?

标签: python interpolation rgb lighting


【解决方案1】:

听起来你想从colorFrom开始,逐渐步入 沿着直线一直走到colorTo

这段代码的作用是从colorFrom 开始,然后递增当前 颜色就像你从 blackcolorTo 一样。

如果没有完整的代码,很难确定,但看起来你应该 替换这个:

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 中,它是浮点数。

【讨论】:

  • 非常感谢。我不得不将这些步骤保留为 int,因为我使用的库不支持颜色的浮点数。它工作得很好,也很流畅
  • 好吧,您可以在内部使它们成为浮点数,并在设置颜色时转换为int(代码看起来已经在这样做了)。这样可能会更流畅一些。
猜你喜欢
  • 2013-03-26
  • 2013-04-10
  • 1970-01-01
  • 2011-12-22
  • 2014-05-29
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多