有人知道如何在python中循环RGB值吗?例如。R= 255,G= 255,B= 255
R -= 1,直到0,然后再上升,然后使G下降,以此类推?
(这是pygame中的文本颜色)
发布于 2019-12-18 21:50:33
这是一个相当容易做的转变-向颜色的每个成分中添加一些量,然后确保它仍然在颜色值的法定范围内。这里我假设了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" )
发布于 2019-12-18 18:22:48
您可以使用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
正如你所看到的,在所有的数字都等于或小于零之后,变量“”被设置为1。这样,我们就可以通过对数字求和,使它们返回到它们的原始值。
发布于 2019-12-18 18:21:51
像这样的东西?
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)
我敢肯定你可以修改这个比特,使它有一个循环淡出效果,如果这就是你要找的。
https://stackoverflow.com/questions/59397594
复制