UIColor的默认色彩空间是什么?

Vla*_*vík 17 rgb uicolor srgb ios

在初始化UIColor类中的实例时,我找不到描述RGB值应使用哪个颜色空间的文章或文档.

在ios应用程序中获得正确颜色的文章说我们应该使用Generic RGB.另一方面,我发现有几篇帖子说我们绝对应该在iOS上使用sRGB.

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

一个新的色彩空间在iPad Pro和iPhone 7.在现有的图像资源的配置文件必须被转换成显示P3使用所谓的"显示P3".对于Digital Color Meter应用程序,必须选择P3配置文件才能获得"显示P3"RGB值.查看截图.

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

Yoh*_*hst 6

TL; DR

iOS使用Extended sRGB作为默认值.

详细说明

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

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

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

从2016年开始,有一个很好的WWDC视频,使用宽色,可以很好地解释这种现象(转到8:35).

因此,如果您在应用程序中使用sRGB颜色,那么即使对于e-sRGB显示器也应该很好.当然,如果您需要sRGB色域之外的特定颜色之一,则需要使用e-sRGB色彩空间.


vsa*_*510 6

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

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

基本上,虽然Sketch使用自定义颜色选择器,它采用sRGB颜色组件,但Xcode的颜色选择不会.

的UIColor最常用的工厂方法+ colorWithRed:绿:蓝:阿尔法:假定sRGB色彩空间(扩展的sRGB如果与iOS 10.x的链接),但它也有另一家工厂方法,colorWithDisplayP3Red:绿:蓝:阿尔法:将采取在您的显示P3颜色空间RGBA组件中,但在内部将它们存储为已翻译的值,并引用sRGB颜色空间.

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

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

有趣的是,了AppKit的对应的UIColor,NSColor,支持更多可用的工厂方法(包括一个设计有一个自定义的色彩空间专门模仿的UIColor的+ colorWithRed:绿:蓝:阿尔法:行为)的方式更多的灵活性.我不确定为什么UIColor会受到更多限制.