2017-04-14 122 views
2

的HSVA/HSLA属性作为一个可在pygame的文档here在读,一个pygame.Color对象具有两个不同的属性,即pygame.Color.hsvapygame.Color.hsla可以读取并分配给。无法设置pygame.Color

但是,我似乎无法做到这一点。事实上,运行脚本

import pygame 
from pygame import Color as C 
pygame.init() 

t = (100, 0, 0, 100) 

c = C(0,0,0) 
print(c.hsva) 
c.hsva = t 
print(c.hsva) 
c = C(100, 45, 10) 
print(c.hsva) 
c.hsva = t 
print(c.hsva) 

打印意想不到的结果,即

(0.0, 0.0, 0.0, 100.0) 
(0.0, 0.0, 0.0, 100.0) 
(23.333333333333336, 89.99999999999999, 39.21568627450981, 100.0) 
(0.0, 0.0, 0.0, 100.0) 

这清楚地表明,我不能够分配给.hsva属性(改变“HSVA”到“HSLA”显示同样的不稳定行为)。此外,在定义新颜色并尝试更改.hsva后,颜色完全改变。

我错过了什么,或者这是一个错误?

+0

pygame.color对象将内部的颜色值存储为RGB,从我所知道的情况来看。所以如果饱和度和数值均为0,则色调根本不会影响RGB值 - 它们将全部为零。所以,当你问它的RGB值的hsva表示时,色调可能是任何东西,而且它似乎默认为零。但问题是,如果饱和度和数值为零,为什么要关心色调? –

+0

@RandomDavis我认为改变色调会改变颜色本身,无论饱和度和价值。所以也许我唯一的问题是我没有完全意识到配色方案是如何工作的。 – RGS

+0

没错。任何东西的色调,但饱和度和零值,将在RGB中表示为(0,0,0)。因此,改变色调不会影响RGB。但是,这只是假设它只在RGB内部存储颜色,这似乎是这种情况。 –

回答

1

为了更容易从将来参观这个问题,为他人迅速采取一些有用的东西,让我在回答中总结讨论结果:

中的问题提供的代码不显示Pygame中的bug也没有显示任何意外的行为。

明白,.hsva get/set和预期一样,必须要充分认识到的配色方案在pygame的是如何工作的,不是让思维,改变色调会改变颜色全部由自己的错误,不管饱和度和价值。

pygame.color对象在内部将颜色值存储为RGB

因此,如果饱和度和数值均为0,则色调根本不会影响RGB值 - 它们将全部为零。所以,当你问它 hsva表示它的RGB值, 色相可能是任何东西,它似乎默认为零。

任何事物的色调,但饱和度和零值,将在RGB中表示为 (0,0,0)。因此,改变色调不会影响RGB。