有人知道如何在python中循环显示RGB值吗?例如R = 255,G = 255,B = 255
R-= 1直到0,然后回升,然后使G下降,依此类推?
(这是pygame中的文本颜色)
答案 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)
如果您要的是此功能,我敢肯定您可以对其进行一些修改,以使其具有循环的淡入淡出效果。