Kivy 颜色代码是什么以及它们如何工作?

问题描述 投票:0回答:3

我在任何地方都找不到这个问题所以...

kivy颜色代码是什么(比如有4个数字的)

示例

Window.clearcolor = (1, 1, 1, 1)

我知道我可以通过几行代码轻松使用 RGB,但我真的只是好奇这种类型的颜色系统是什么以及它是如何工作的。

python colors kivy
3个回答
3
投票

Kivy 仅使用 RGB 值除以 255。此外,还有一个 alpha 颜色通道,表示透明度(值越高越不透明,越低值越透明)

因此,如果您想要白色

(#FFFFFF, opaque)
,则将
(255, 255, 255, 255)
并将每一项除以
255
得到
(1, 1, 1, 1)

kivy.utils 提供了一个十六进制解释器,如果您愿意的话:

kivy.utils.get_color_from_hex()
。它需要一个字符串,例如
'#FFFFFF'
表示白色,并返回 kivy 可以解释的颜色。


1
投票

Kivy 的颜色 RGB(A) - 不要将颜色空间与内存中的颜色表示混淆。

最终 RGB 测量从亮度零(黑色)到最大亮度(纯红/蓝/绿,如果您愿意)的范围内的每个红色、绿色和蓝色分量。从数学上讲,这是一个由无限亮度选择组成的连续区间,但实际上您无法表示所有这些,因此您必须选择有用的内容。

经常使用每个分量在 0-255 范围内的 RGB 颜色代码,因为它们可以很好地映射到物理设备。例如,显示器的每个像素可能支持每种颜色的 255 个(并非巧合的 2^8 - 1)设置,因此如果您想编写代码来直接解决这些设置,那么很自然地使用此范围内的整数:在本例中255代表最大亮度。

但是,这里选择 255 是相当随意的,暴露了颜色处理的实现细节。如果您想表示进行颜色变换的连续颜色间隔,那么它尤其任意。例如,如果渲染一个复杂的场景,您可以想象复杂的照明变换,其中灯光从表面反射(如果不是 100% 反射,则变得更暗),或者组合两个灯光在同一位置照射。如果您在每一步将值修剪为 255 个整数,则结果看起来很垃圾,因为它完全无法代表光所穿过的连续光谱。在这种情况下,使用表示尽可能接近连续间隔的数据类型更有意义:0-1 范围内的浮点数是显而易见的选择,其中 1 表示最大亮度。

您可能会认为这在数学上也更纯粹,避免不必要地暴露颜色存储方式的实现细节,尽管直接控制像素颜色有一定的价值。

这也是为什么您可以通过将 0-255 值除以 255 来转换为 Kivy 约定:它们代表完全相同的事物。

在任何情况下,0-1 范围都是标准的,例如OpenGL就是这个原因。 Kivy 选择这种约定,而不是 0-255。


0
投票

kivy.utils.get_color_from_hex 适用于任何想要使用十六进制字符串的人。

© www.soinside.com 2019 - 2024. All rights reserved.