RGB循环python

时间:2019-12-18 17:50:18

标签: python pygame rgb

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

R-= 1直到0,然后回升,然后使G下降,依此类推?

(这是pygame中的文本颜色)

3 个答案:

答案 0 :(得分:2)

您可以使用max()获取元组中的最大数字,并减去每个数字,直到所有数字等于或小于零为止,如下所示:

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

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

答案 1 :(得分:2)

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

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个值,因为颜色大部分是黑色。

### 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 :(得分:1)

像这样吗?

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)

如果您要的是此功能,我敢肯定您可以对其进行一些修改,以使其具有循环的淡入淡出效果。