我目前正试图围绕iOS的CGColorSpace颜色管理API的当前状态。在iOS 8.1 SDK之前(据我所知),在CGColorSpace.h
中的许多函数&常量被标记为__IPHONE_NA
。但是,根据核心图形的iOS 8.1 API Diffs,许多先前为__IPHONE_NA
的函数&已更新为__IPHONE_2_0
。那么我们该怎么解释呢?iOS上的CGColorSpace API和颜色管理状态?
我不认为苹果公司为旧iOS版本追溯支持这些功能,而只是将这些功能的可见性从私有变为公共。尝试在不同的iOS版本&设备上使用某些功能时出现问题。例如:
CGColorSpaceRef sRgb = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); // kCGColorSpaceSRGB is labeled __IPHONE_8_0
CFDataRef profData = CGColorSpaceCopyICCProfile(...);
- 在iPad赠送(原始)运行iOS 8.2:
sRgb
&profData
将是NULL。 - 在运行iOS 8.3的iPad 3上:
sRgb
&profData
将为NULL。 - 在运行iOS 9.2.1的iPhone 6 Plus上:
sRgb
将包含非NULLCGColorSpaceRef
,profData
将包含非NULLCFDataRef
缓冲区。 - 在运行iOS 9.2.1的iPad Mini(原)上:
sRgb
将包含非NULLCGColorSpaceRef
,profData
将包含非NULLCFDataRef
缓冲区。
因此,至少对于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更改的内容。有谁知道是否有这样的文件?
提醒:如果您发现之一以下答案已解决/回答了您的问题,请将其标记为已接受的答案! –