python - 无法设置 pygame.Color 的 hsva/hsla 属性

标签 python python-3.x colors pygame

正如您可以在 pygame 文档中看到的那样 here ,一个pygame.Color对象有两个不同的属性,分别是pygame.Color.hsvapygame.Color.hsla,可以读取和赋值到。

不过,我好像做不到。其实就是运行脚本

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 后,颜色会完全改变。

我是不是遗漏了什么或者这是一个错误?

最佳答案

为了让其他人在以后访问这个问题时更容易快速获得有用的东西,让我在答案中总结一下讨论的结果:

The in the question provided code does not show a bug in Pygame nor does it show any unexpected behavior.

要理解 .hsva get/set 按预期工作,有必要充分了解配色方案在 Pygame 中的工作方式,不要错误地认为改变色调会改变颜色本身,不管饱和度和值(value)。

The pygame.color object stores the color value internally as RGB.

所以如果饱和度和明度都为0,色调不会影响 根本没有 RGB 值 - 它们将全部为零。所以,当你问它 对于其 RGB 值的 hsva 表示, 色调可以是任何东西,而且默认值似乎为零。

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

关于python - 无法设置 pygame.Color 的 hsva/hsla 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419188/

相关文章:

python - 在wxPython中,event.Skip()和event.Veto()有什么区别?

python - isinstance(...) 的功能;但没有实例?

c# - 如何将RGBA css颜色格式转换为十六进制格式

android - 色差atan和atan2结果差异

Python多线程-全局解释器锁

python - 使用多行字符串执行查询

Python3.0 - 标记化和取消标记化

python-3.x - 在LightGBM中使用多个自定义指标

python - 将嵌套的 for 循环转换为等效的 map

python - Learning Object Detection 检测结果显示变色