RGB 循环 python
RGB cycle python
有谁知道如何在 python 中循环显示 RGB 值?前任。 R = 255,G = 255,B = 255
R -= 1 直到 0 然后返回,然后让 G 下降等等?
(这是 pygame 中的文本颜色)
是这样的吗?
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)
我相信您可以修改此 abit 以使其具有循环淡入淡出效果,如果您正在寻找的话。
您可以使用 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
可以看到,当所有的数都等于或者小于0之后,变量"step"就被置为1,这样我们就可以通过求和让这些数回到原来的值了他们。
这是一个相当容易的转变 - 为颜色的每个成分添加一些量,然后确保它仍在颜色值的合法范围内。这里我假设了 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" )
有谁知道如何在 python 中循环显示 RGB 值?前任。 R = 255,G = 255,B = 255
R -= 1 直到 0 然后返回,然后让 G 下降等等?
(这是 pygame 中的文本颜色)
是这样的吗?
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)
我相信您可以修改此 abit 以使其具有循环淡入淡出效果,如果您正在寻找的话。
您可以使用 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
可以看到,当所有的数都等于或者小于0之后,变量"step"就被置为1,这样我们就可以通过求和让这些数回到原来的值了他们。
这是一个相当容易的转变 - 为颜色的每个成分添加一些量,然后确保它仍在颜色值的合法范围内。这里我假设了 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" )