首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RGB cycle python

RGB cycle python
EN

Stack Overflow用户
提问于 2019-12-19 01:50:18
回答 3查看 1K关注 0票数 2

有人知道如何在python中循环RGB值吗?例如。R= 255,G= 255,B= 255

R -= 1,直到0,然后再上升,然后使G下降,以此类推?

(这是pygame中的文本颜色)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-19 05:50:33

这是一个相当容易做的转变-向颜色的每个成分中添加一些量,然后确保它仍然在颜色值的法定范围内。这里我假设了8位颜色,因此有效范围是0-255。显然,如果代码需要16位颜色,范围会更大。

代码语言:javascript
复制
def shiftColour( colour, level_shift=-1 ):
    """ Return the colour with each component shifted (with boundary looping)"""
    red, green, blue = colour

    red += level_shift     # handle cycling in +/- for any level_shift
    if ( red < 0 ):
        red = 255
    elif ( red > 255 ):
        red = 0

    green += level_shift
    if ( green < 0 ):
        green = 255
    elif ( green > 255 ):
        green = 0

    blue += level_shift
    if ( blue < 0 ):
        blue = 255
    elif ( blue > 255 ):
        blue = 0

    return ( red, green, blue )   # re-combine, back into a colour

从最高点向下转换只是记住周期在哪里的问题。你可能不想使用最后的50个值,因为大多数颜色是黑色的。

代码语言:javascript
复制
### Main
colour = ( 255, 245, 235 )
delta  = 1
for i in range( 300 ):
    colour = shiftColour( colour, delta )
    print("R=%d, G=%d, B=%d" % ( colour[0], colour[1], colour[2] ) )
    if ( i % 50 == 0 ):
        delta *= -1
        print( "direction-change" )
票数 2
EN

Stack Overflow用户

发布于 2019-12-19 02:22:48

您可以使用max()来获得元组中的最大数字,然后减去每个数字,直到所有数字都等于或小于零,如下所示:

代码语言:javascript
复制
RGB = (255,200,201)

red = RGB[0]
green = RGB[1]
blue = RGB[2]

step = -1

for i in range( max(RGB) * 2 + 2):

    print(
        "R:",red if red > 0 else 0,
        "G:",green if green > 0 else 0,
        "B:",blue if blue > 0 else 0
        )

    if all( map( lambda x: True if x < 0 else False, [red,green,blue] ) ):
        step = 1

    red += step
    green += step
    blue += step

正如你所看到的,在所有的数字都等于或小于零之后,变量“​​”被设置为1。这样,我们就可以通过对数字求和,使它们返回到它们的原始值​​。

票数 2
EN

Stack Overflow用户

发布于 2019-12-19 02:21:51

像这样的东西?

代码语言:javascript
复制
r = 255
g = 255
b = 255
while(r>0):
    r-=1
    print("Red: %s" %r)
    if(r==0):
        while(g>0):
            g-=1
            print("Green: %s" %g)
            if(g==0):
                while(b>0):
                    b-=1
                    print("Blue: %s" %b)

我敢肯定你可以修改这个比特,使它有一个循环淡出效果,如果这就是你要找的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59397594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档