2016-02-17 40 views
1

我目前正试图围绕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将包含非NULL CGColorSpaceRefprofData将包含非NULL CFDataRef缓冲区。
  • 在运行iOS 9.2.1的iPad Mini(原)上:sRgb将包含非NULL CGColorSpaceRefprofData将包含非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

提醒:如果您发现之一以下答案已解决/回答了您的问题,请将其标记为已接受的答案! –

回答

0

您可以看看一个名为little-CMS的开源库。 它给你很好的结果,你可以集成到你的应用程序。

https://github.com/mm2/Little-CMS

+0

我熟悉Little CMS,并将其用于我们的应用程序Ho wever这个问题是专门针对用于颜色管理的原生iOS API的,而不是第三方库可用的。 – Cutterpillow

1

你的研究结果是到iOS 9的ColorSync /没有得到支持正确─现有CGColorSpace;假定所有图像资产都在设备的sRGB色彩空间CGColorSpaceused 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之前不会执行任何操作。

所以,你有几个选择:

  1. 只支持iOS的9或更高版本。
  2. 在iOS 9+上使用适当的颜色空间渲染; iOS 8用户将获得不太准确的图像颜色渲染。
  3. 使用第三方库,如@SumitKumarSaha建议。

另外值得一提的是色彩空间精确的渲染已经成为去年更大的交易或所谓的iPad的临9.7" (2016),iPad的临10.5" & 12.9" (2017年),iPhone 7个& 7个加(2016),并在所有使用显示P3广泛色彩空间的产品线较新的机型(根据DCI P3)

WWDC 2015 Session 510 - What's New in Core Image

更多信息