作者:爱上为突然_381 | 来源:互联网 | 2022-12-26 10:43
创建UIColor时,默认情况下最好使用init(displayP3Red:green:blue:alpha :)进行可用性检查吗?老实说,我看不到两者之间的区别,因此不确定是否有什么问题,但我希望有人能对此有所了解。
if #available(iOS 10.0, *) {
self.init(displayP3Red: r, green: g, blue: b, alpha: a)
} else {
self.init(red: r, green: g, blue: b, alpha: a)
}
rickster..
6
不,这些电话并不相同。将相同的RGBA值传递给每个将导致不同的颜色。
这是一篇方便的文章,讨论了色彩空间的差异。它很好地比喻了色彩空间就像尺子上的长度单位。如果我说某个对象的长度为1.0,除非您知道“ 1.0”的长度,否则这没有任何意义。英寸?米?福隆?差距?单位的定义与测量中所指的数量有很大的不同。
同样,如果我说一种颜色的红色分量为1.0,则除非我也说红色 1.0的程度,否则这没有任何意义。(用于绿色和蓝色组件的同上。)在Web和应用程序设计的许多历史中,可以安全地假设所有度量值均相对于sRGB标准-1.0红色表示“与sRGB相同的红色”。
但是随着电话,计算机,电视等的出现,支持更大的色域,这种假设已不再安全。Display P3是较新的Apple设备使用的色彩空间(与较新的4K HDR电视所使用的色彩空间非常匹配)。P3支持比sRGB更大的颜色范围,这意味着“如sRGB可以得到的红色”还不够红色。
为了使sRGB和P3设备之间的互操作更容易一些,Apple的API包括“扩展的sRGB”色彩空间。在常规的sRGB中,就像在大多数颜色空间中一样,分量值限制在0.0-1.0范围内-也就是说,红色分量不能为1.1,如果尝试,则只能将其限制为1.0。 。对于0.0-1.0范围内的分量值,扩展sRGB定义为与sRGB相同,但允许使用该范围外的值来表示sRGB色域之外的颜色。(这是Apple文档说UIColor(red:green:blue:alpha:)
使用扩展的sRGB色彩空间时的意思。)
UIColor
(CGColor
位于其下方)在iOS中没有提供方便的实用程序进行色彩空间转换,但NSColor
在macOS中却提供了方便的实用程序来说明区别:
第一个红色等效UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1)
于iOS。第二个等效UIColor(red: 1, green: 0, blue: 0, alpha: 1)
于iOS。如果您正在P3显示屏*上查看此答案,则可能会注意到颜色样本之间至少存在细微的差异。
在下面,注意转换后的值。“ sRGB max red”,又名UIColor(red: 1, green: 0, blue: 0, alpha: 1)
与(r: 0.918, g: 0.2, b: 0.139, a: 1)
P3 大致相同。“ P3 max red”(又名UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1)
sRGB)在sRGB之外,但可以在“扩展的sRGB”中表示为(r: 1.093, g: -0.227, b: -0.15, a: 1)
。
*具有P3显示屏的Apple设备包括iPhone 7,iPad Pro 2016,iMac 2015年秋季,MacBook Pro 2016年秋季以及更高版本
1> rickster..:
不,这些电话并不相同。将相同的RGBA值传递给每个将导致不同的颜色。
这是一篇方便的文章,讨论了色彩空间的差异。它很好地比喻了色彩空间就像尺子上的长度单位。如果我说某个对象的长度为1.0,除非您知道“ 1.0”的长度,否则这没有任何意义。英寸?米?福隆?差距?单位的定义与测量中所指的数量有很大的不同。
同样,如果我说一种颜色的红色分量为1.0,则除非我也说红色 1.0的程度,否则这没有任何意义。(用于绿色和蓝色组件的同上。)在Web和应用程序设计的许多历史中,可以安全地假设所有度量值均相对于sRGB标准-1.0红色表示“与sRGB相同的红色”。
但是随着电话,计算机,电视等的出现,支持更大的色域,这种假设已不再安全。Display P3是较新的Apple设备使用的色彩空间(与较新的4K HDR电视所使用的色彩空间非常匹配)。P3支持比sRGB更大的颜色范围,这意味着“如sRGB可以得到的红色”还不够红色。
为了使sRGB和P3设备之间的互操作更容易一些,Apple的API包括“扩展的sRGB”色彩空间。在常规的sRGB中,就像在大多数颜色空间中一样,分量值限制在0.0-1.0范围内-也就是说,红色分量不能为1.1,如果尝试,则只能将其限制为1.0。 。对于0.0-1.0范围内的分量值,扩展sRGB定义为与sRGB相同,但允许使用该范围外的值来表示sRGB色域之外的颜色。(这是Apple文档说UIColor(red:green:blue:alpha:)
使用扩展的sRGB色彩空间时的意思。)
UIColor
(CGColor
位于其下方)在iOS中没有提供方便的实用程序进行色彩空间转换,但NSColor
在macOS中却提供了方便的实用程序来说明区别:
第一个红色等效UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1)
于iOS。第二个等效UIColor(red: 1, green: 0, blue: 0, alpha: 1)
于iOS。如果您正在P3显示屏*上查看此答案,则可能会注意到颜色样本之间至少存在细微的差异。
在下面,注意转换后的值。“ sRGB max red”,又名UIColor(red: 1, green: 0, blue: 0, alpha: 1)
与(r: 0.918, g: 0.2, b: 0.139, a: 1)
P3 大致相同。“ P3 max red”(又名UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1)
sRGB)在sRGB之外,但可以在“扩展的sRGB”中表示为(r: 1.093, g: -0.227, b: -0.15, a: 1)
。
*具有P3显示屏的Apple设备包括iPhone 7,iPad Pro 2016,iMac 2015年秋季,MacBook Pro 2016年秋季以及更高版本