22

在从 UIColor 类初始化实例时,我找不到描述应该将哪个颜色空间用于 RGB 值的文章或文档。

在你的 ios 应用程序中获取正确的颜色一文说我们应该使用 Generic RGB。另一方面,我发现一些帖子说我们绝对应该在 iOS 上使用 sRGB。

似乎默认颜色空间是 sRGB,如CGColorSpace Reference中所写

iPad Pro 和 iPhone 7中使用了一种名为“Display P3”的新色彩空间。现有图像资源中的配置文件必须转换为 Display P3。对于数字色度计应用程序,必须选择 P3 配置文件才能获得“显示 P3”RGB 值。请参阅屏幕截图。

如何为 Display P3 色彩空间选择正确的 RGB 值。 在此处输入图像描述

4

2 回答 2

14

TL;博士

iOS 使用扩展 sRGB 作为其默认设置。

详细说明

这可以通过 Xcode 中的调试器轻松验证:

  • 在代码的任何位置放置断点,
  • 当 lldb 出现时,输入po UIColor.red,
  • 从 iOS 11、Xcode 9.2 开始,上述命令将返回UIExtendedSRGBColorSpace 1 0 0 1

此颜色空间可以使用相同的 sRGB 值而无需更改颜色,但同时允许 RGB 值变为负值以及大于 1.0 以表示 sRGB 颜色空间(即扩展的 sRGB 颜色空间)之外的颜色。

2016 年的 WWDC 视频Working with Wide Color很好地解释了这种现象(转至 8:35)。

因此,如果您在应用程序中使用 sRGB 颜色,即使是 e-sRGB 显示器,您也应该可以使用。当然,如果您需要 sRGB 色域之外的特定颜色之一,则需要使用 e-sRGB 颜色空间。

于 2017-06-19T18:36:03.130 回答
10

我写了一篇博文详细解释了这一点:

http://www.vsanthanam.com/writing/2017/7/6/colors-in-ios-ensuring-consistency-between-designs-interface-builder-and-uicolor

本质上,虽然 Sketch 使用了一个假设 sRGB 颜色分量的自定义颜色选择器,但 Xcode 的颜色选择却没有。

UIColor 最常见的工厂方法 +colorWithRed:green:blue:alpha: 假定为 sRGB 颜色空间(如果与 iOS 10.x 链接,则为扩展 sRGB),但它还有另一个工厂方法 colorWithDisplayP3Red:green:blue:alpha:在 Display P3 颜色空间 RGBA 组件中,但在内部将它们存储为转换值并引用 sRGB 颜色空间。

与往常一样,请查看 Apple 关于 UIColor 的文档以获取更多信息:

https://developer.apple.com/documentation/uikit/uicolor?changes=latest_minor

有趣的是,AppKit 的 UIColor 对应物 NSColor,通过更多可用的工厂方法(包括一种专门为模仿 UIColor 的 +colorWithRed:green:blue:alpha: 行为而设计的自定义颜色空间)支持更大的灵活性。我不确定为什么 UIColor 更受限制。

于 2017-07-08T20:40:29.927 回答