我在任何地方都找不到这个问题所以...
kivy颜色代码是什么(比如有4个数字的)
示例
Window.clearcolor = (1, 1, 1, 1)
我知道我可以通过几行代码轻松使用 RGB,但我真的只是好奇这种类型的颜色系统是什么以及它是如何工作的。
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 可以解释的颜色。
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。
kivy.utils.get_color_from_hex 适用于任何想要使用十六进制字符串的人。