如何将 UIExtendedSRGBColorSpace 与我的颜色值匹配

How to match UIExtendedSRGBColorSpace to my color values

我使用 XCode 可视化编辑器设置了 UIButton 的颜色。我使用 RGB 滑块设置它。

然后我设置变量green:

let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

当我打印出 green 值和 UIButton.backgroundColor 时,我相应地得到了​​下一个值:

UIExtendedSRGBColorSpace -0.146119 0.836984 -0.0130851 1
UIExtendedSRGBColorSpace 0 0.823529 0 1

所以,正如我猜测的那样,颜色空间是相等的,但值不是。为什么会这样?苹果的 UIButton() 做了一些隐藏的转换?什么目的?此按钮 属性 和 green 属性.

是否可以具有相同的值

在 "RGB Sliders" 弹出菜单旁边有一个按钮 允许您选择颜色 space:

在您的情况下,它设置为 "Display P3",一种颜色 space,即 "larger" 比 sRGB 颜色 space 允许显示更多 带有 P3 显示屏的较新设备上的颜色。这种颜色代表 在组件不存在的 "extended sRGB colorspace" 中 限制在 0.0 到 1.0 的范围内(参见 UIColor 中的 "Color and Color Spaces" 想要查询更多的信息)。你的情况

UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

红蓝负分量,即色域外的颜色 sRGB。

如果您将颜色选择器中的颜色space设置为"sRGB",那么0/210/0的结果将为

UIExtendedSRGBColorSpace 0 0.823529 0 1

相同
let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

或者,以编程方式使用显示 P3 颜色 space 还创建了颜色:

print(label.backgroundColor!)
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

let green = UIColor(displayP3Red: 0, green: 210/255, blue: 0, alpha: 1)
print(green)
// UIDisplayP3ColorSpace 0 0.823529 0 1
print(UIColor(cgColor: green.cgColor))
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

print(label.backgroundColor! == green)
// true