相对颜色变化

时间:2015-08-22 02:23:30

标签: python colors pygame rgb

场合

所以我正在处理菜单的一些按钮,我正在使用函数来简化过程。 当我调用该函数时,我遇到的问题有9个参数:

def toggleButton(msg, x, y, w, h, c1, c2, toggle, boo):

但我在这里所需要的只是参数c1和c2。 简单来说,它们是按钮在每个二进制状态下的颜色。

在函数内部有一个链接变量“color” 在每个切换状态下,颜色在c1和c2之间交换

问题

现在我们有了一个上下文,我的问题是如何根据实际的颜色知识改变c1和c2的值?

c1 = (r, g, b)

然后我把c1变成:

c1 = (r+10, g+10, b+10)

最初不必知道(r,g,b)?

我尝试使用c1 [0]输出r,但不允许我更改值。

我试图解决这个问题的测试代码是:

colour = (255, 255, 255)      ##arbitrary colour
print(colour)                 ##print the colour, outputs (255, 255, 255)

print(colour[0])              ## print first number, outputs 255
colour[0] = colour[0] - 50    ## code breaks with error "TypeError: 'tuple' object does not support item assignment"
print(colour)
print(colour[0])

修改

我已经得到了上述问题的答案,但这是我发现的一个问题,如果产生的颜色为:

colour = tuple([c+50 for c in colour])

无效,它会中断(显然) 我试过了

for c in colour:
        if c > 255:
            colour[c] = tuple(255)

解决这个问题,但它不起作用,所以如果有人可以帮助我,这对于防止将来出现错误非常有用,特别是因为我不知道在我的代码使用时会选择哪种颜色最终产品。

1 个答案:

答案 0 :(得分:0)

你不能从元组中减去一个int。如果你想从每个颜色元素中减去50,你可以使用

colour = tuple([c-50 for c in colour])

如果要为每个值添加delta,并将结果约束在0到255之间,则可以使用

colour = tuple([max(0, min(255, c+delta)) for c in colour])