我目前正试图围绕iOS上CGColorSpace色彩管理API的当前状态。在iOS 8.1 SDK之前(据我所知)许多功能& CGColorSpace.h
中的常量标记为__IPHONE_NA
。但是,根据核心图形的iOS 8.1 API Diffs许多功能&之前__IPHONE_NA
的常量已更新为__IPHONE_2_0
。那么我们该怎么解释呢?
我认为Apple并不追溯性地将这些功能添加到旧iOS版本中,而只是将这些功能的可见性从私有变为公共。尝试在不同的iOS版本上使用其中一些功能时出现问题。设备。例如:
CGColorSpaceRef sRgb = CGColorSpaceCreateWithName( kCGColorSpaceSRGB ); // kCGColorSpaceSRGB is labeled __IPHONE_8_0
CFDataRef profData = CGColorSpaceCopyICCProfile( ... );
sRgb
& profData
将为NULL。sRgb
& profData
将为NULL。sRgb
将包含非NULL CGColorSpaceRef
,profData
将包含非NULL CFDataRef
缓冲区。< / LI>
sRgb
将包含非NULL CGColorSpaceRef
,profData
将包含非NULL CFDataRef
缓冲区因此,至少在iOS 8中,似乎这些功能尚未完全实现。对于iOS 9,似乎开始工作。
是否有任何文档或资源描述了这些API在iOS 8和iOS 9中的变化? CGColorSpaceCreateWithName( kCGColorSpaceSRGB )
返回NULL时应使用什么颜色空间?在这种情况下,似乎CGColorSpaceCreateDeviceRGB()
可能是唯一的选择。
经过一些测试后,我发现可以从CGImageRef
获取嵌入的颜色配置文件并使用该配置文件将颜色转换应用到另一个颜色空间,只要您自己进行颜色转换即可。 Core Graphics API仍然不支持在色彩空间之间转换图像,但是如果你有自己的色彩管理功能,现在可以在iOS上自己做 - 这是之前无法实现的。
我只想知道什么是有效的,有效的。我已经尝试查看发行说明并寻找描述从iOS 7到8和8到9的变化的技术说明,但我还没有找到任何描述CGColorSpace API变化的内容。有谁知道是否有这样的文件?
答案 0 :(得分:1)
您的发现是正确的 - 在iOS 9之前,不支持ColorSync / CGColorSpace
;假设所有图像资源都在设备的sRGB颜色空间(CGColorSpace
used to state “iOS does not support ColorSync, so all assets should be provided in the native device color space: sRGB”的文档)。
所以尽管早期版本中存在CGColorSpace
/ CGColorSpaceRef
,但在iOS 9.0之前它没有做任何事情。
所以你有几个选择:
值得注意的是,在过去的一年左右,色彩空间精确渲染已成为一个更大的问题 - iPad Pro 9.7“(2016),iPad Pro 10.5”&amp; 12.9“(2017),iPhone 7&amp; 7 Plus(2016)以及这些产品系列中的较新型号均使用Display P3宽色空间(基于DCI P3)。
答案 1 :(得分:0)
您可以查看名为little-CMS的开源库。 它提供了可以集成到您的应用程序中的良好结果。