har*_*ell 9 macos objective-c nscolor
有几种方便类方法可用于创建NSColor.但是,我似乎无法确定何时使用下面的不同类方法:
colorWithSRGBRed:green:blue:alpha:vs colorWithDeviceRed:green:blue:alpha:vscolorWithCalibratedRed:green:blue:alpha:
一组RGB值并不真正描述颜色.它只告诉您的图形适配器在该颜色中需要多少百分比的红色,绿色和蓝色光,但是50%纯红色在所有显示器上的颜色不同,原因有两个:
所有显示器上50%的相对亮度并不相同,因为伽玛曲线略有不同(由于背光亮度不同,绝对亮度也不一样,但这实际上是不相关的 - 只有相对值很重要)
即使100%的红色与红色调不同,显示器也会有不同的"红色",这取决于它们的背光颜色和滤色器.
因此RGB的相同组合在不同的监视器上可能看起来不同.作为你的显示器上的橙色,它可能看起来像一些非常明亮的红色,在其他显示器上看起来像一个深黄色.它到处都是相同的RGB值,但颜色不一样.
为了使RGB描述"颜色",它还需要一个颜色空间,它定义了一个颜色空间,其中RGB值就像是该空间中的坐标,从而描述了精确的颜色.
 (最初的上传者是英语维基百科的Cpesacreta  - 由en.wikipedia转移到下议院的Commons.)
(最初的上传者是英语维基百科的Cpesacreta  - 由en.wikipedia转移到下议院的Commons.)
如果您使用colorWithDeviceRed:green:blue:alpha:,RGB值不会被转换,它们会像这样报告给您的图形适配器.因此,颜色确实具有这些RGB值,但是用户在屏幕上看到的结果将因屏幕而异.
如果使用colorWithSRGBRed:green:blue:alpha:,则RGB值将被解释为sRGB颜色空间的RGB值.系统知道该空间,因此它知道这里描述的颜色.如果系统也知道显示器的色彩空间(例如,因为它已在工厂或用户使用校准工具进行校准),那么它可以将RGB值从sRGB色彩空间转换为您的显示器的原生色彩空间监控.此转换将在到达显示器的路上更改绝对RGB值.您可能已经使用过#758299,显示器实际上会显示,#7483A1但这是因为颜色#7483A1看起来与#758299此显示器上的sRGB颜色完全相同,因此用户可以看到预期的正确颜色(即使它可能没有相同的RGB值 - 但是用户不会看到RGB值,他们看到颜色).
sRGB是一个非常流行的色彩空间,它是最兼容的色彩空间,大多数图形应用程序和系统都知道它,你可以期望每个现代显示器能够正确显示几乎所有现有的sRGB颜色.但它也是一个非常有限的色彩空间.sRGB只是目前大多数设备可以显示的所有颜色的一个子集,它也不提供1670万种不同的颜色(即使有很多可能的RGB组合).这就是为什么存在更宽的色彩空间,例如Adobe在所有Adobe图形应用程序中找到的色彩空间.Apple提供了一个名为"校准色彩空间"的色彩空间 - 有时也称为"通用色彩空间".你colorWithCalibratedRed:green:blue:alpha:可以在文档中使用它,也就是我在文档中找到的,这基本上是HSB颜色空间,比sRGB宽(在内部它以不同的格式存储颜色,但有一个固定的,设备中立的公式将RBG转换为HSB和HSB回到RGB).
因此,如果颜色正确性对您很重要(用户将看到您在屏幕上看到的颜色相同,无论实现该颜色需要什么RGB值),您应始终将颜色与颜色空间结合使用.无论您使用sRGB还是Generic/Calibrated都没关系,只需在整个应用程序中使用相同的一个.
如果使用在sRGB中报告颜色的工具,则十六进制值仅与该空间匹配.请注意,所有Web标准都隐式使用sRGB颜色.因此,当您在HTML或CSS文件中使用十六进制颜色时,这些颜色始终被解释为sRGB值.此外,当您从外部源接收颜色并且此源不会告诉您它们属于哪个颜色空间时,假设sRGB始终是最安全的.
如果您使用Digital Color Meter应用程序的颜色选择器(总是随MacOS一起提供)从屏幕上读取颜色,请务必选择在通用RGB中显示或在sRGB中显示,但如果您打算使用,请不要使用显示原生值应用程序或网站上的这些值.原生值只是系统真正用于显示该颜色的值,但此组合仅在您的系统上显示.
当然,如果您的显示器没有正确校准,这些都不会起作用.现代显示器具有计算机可以下载的嵌入式校准配置文件,并且移动设备也将其校准存储在设备上.如果你有一个较旧的显示器或你认为配置文件不准确(或因显示器老化而不再准确!),你需要获得显示校准硬件并使用DisplayCAL之类的工具来生成更好的配置文件(免费,OpenSource,所有主流平台,支持多种USB硬件)
一个常见的问题是,如果我根据错误的色彩空间解释RGB值,实际会发生什么?好吧,它看起来不会完全错误.如果你显示一个较小颜色空间的图像,就好像它是一个较大的颜色空间,那么图像将看起来非常"鲜明"(所有颜色都有很多饱和度,对比度会增强,清晰度会提高),如果是换句话说,图像将看起来相当"静音"(颜色将具有更少的饱和度,对比度我们将减少,清晰度将降低).请参阅此示例:图像具有正常的色彩空间,并在右侧显示正确的色彩空间,左侧显示在宽色彩空间中,将图像RGB值视为属于该宽色彩空间,它们实际上并非如此,因此夸张的活力:
| 归档时间: | 
 | 
| 查看次数: | 2784 次 | 
| 最近记录: |