有几个方便的类方法可以创建NSColor。然而,我似乎无法确定何时使用以下不同的类方法:
colorWithSRGBRed:green:blue:alpha:
与colorWithDeviceRed:green:blue:alpha:
与colorWithCalibratedRed:green:blue:alpha:
有几个方便的类方法可以创建NSColor。然而,我似乎无法确定何时使用以下不同的类方法:
colorWithSRGBRed:green:blue:alpha:
与colorWithDeviceRed:green:blue:alpha:
与colorWithCalibratedRed:green:blue:alpha:
tl;dr 使用经过校准的颜色空间。
不要重复文档 - 答案在 Color Programming Topics 中。
编辑以添加
sRGB 是其中一个命名的颜色空间。
最后,这是文档中的最后一张图片,我希望它可以回答您的问题 - 如果您想使用颜色空间,请使用经过校准的颜色空间。
因此,相同的RGB组合可能在不同的监视器上看起来不同。它在您的监视器上可能是一个漂亮的橙色,但在其他监视器上可能会看起来非常明亮的红色或暗黄色。虽然RGB值相同,但颜色并不相同。
为了使RGB描述“颜色”,还需要一个颜色空间,它定义了一组颜色,其中RGB值就像是该空间的坐标,因此描述了确切的颜色。
(原始上传者为Cpesacreta于英语维基百科-由aboalbiss从en.wikipedia转移到Commons。)
如果使用colorWithDeviceRed:green:blue:alpha:
,RGB值不会被转换,它们会准确地报告给您的图形适配器。因此,颜色将真正具有这些RGB值,但用户在屏幕上看到的结果会因屏幕而异。
colorWithSRGBRed:green:blue:alpha:
,RGB 值将被解释为 sRGB 颜色空间中的 RGB 值。系统知道这个空间,因此它知道这里描述的颜色。如果系统还知道您的显示器的颜色空间(例如,因为它已经在工厂或用户使用校准工具进行过校准),那么它可以将 RGB 值从 sRGB 颜色空间转换为您的显示器的本机颜色空间。这种转换会在传递到您的显示器的绝对 RGB 值上进行更改。您可能已经使用了 #758299
,但显示器实际上会显示 #7483A1
,但这是因为颜色 #7483A1
在这个显示器上看起来与 sRGB 颜色 #758299
完全相同,因此用户看到了预期的正确颜色(即使它们可能没有相同的 RGB 值 - 但用户看不到 RGB 值,他们只看到颜色)。colorWithCalibratedRed:green:blue:alpha:
来使用它,从我在文档中找到的内容来看,这基本上是HSB颜色空间,比sRGB更广泛(内部它以不同的格式存储颜色,但有一个固定的、设备中立的公式来将RBG转换为HSB,反之亦然)。
因此,如果颜色正确性对您很重要(用户应该看到与您在屏幕上看到的相同的颜色,无论需要什么RGB值来实现这一点),您应该始终在颜色空间的组合中指定颜色。无论您使用sRGB还是通用/校准,都没有关系,只需在整个应用程序中使用相同的颜色空间。
如果您使用一个报告 sRGB 颜色的工具,那么十六进制值只匹配该空间。请注意,所有的 Web 标准都隐式地使用 sRGB 颜色。因此,当您在 HTML 或 CSS 文件中使用十六进制颜色时,这些颜色始终被解释为 sRGB 值。同样,当您从外部来源接收颜色并且这个来源没有告诉您它们所属的颜色空间时,最安全的做法是假定为 sRGB。
colorWithCalibratedRed
和colorWithDeviceRed
的问题,但是colorWithSRGBRed
呢? - haroldcampbell