目前,我正试图了解CGColorSpace颜色管理API在iOS上的当前状态。在iOS 8.1SDK之前(据我所知),CGColorSpace.h中的许多函数&常量都被标记为__IPHONE_NA。但是,根据iOS 8.1API差异 for constants,许多以前是__IPHONE_NA的函数和常量都被更新为__IPHONE_2_0。那我们该怎么解释呢?
我认为苹果并不是在旧的iOS版本中追溯地增加了对这些功能的支持,而是将这些功能的可见性从私有更改为公共。当尝试在不同的iOS版本和设备上使用这些函数时,问题就出现了。例如:
CGColorSpaceRef sRgb = CGColorSpaceCreateWithName( kCGColorSpaceSRGB ); // kCGColorSpaceSRGB is labeled __IPHONE_8_0
CFDataRef profData = CGColorSpaceCopyICCProfile( ... ); sRgb & profData将为NULL。sRgb & profData将为NULL。sRgb将包含一个非空CGColorSpaceRef,profData将包含一个非空CFDataRef缓冲区。sRgb将包含一个非空CGColorSpaceRef,profData将包含一个非空CFDataRef缓冲区。因此,至少对于iOS 8,这些函数似乎没有完全实现。对于iOS 9,事情似乎开始起作用了。
是否有任何文档或资源描述这些API在iOS 8和iOS 9中是如何变化的?当CGColorSpaceCreateWithName( kCGColorSpaceSRGB )返回NULL时应该使用什么颜色空间?在这种情况下,CGColorSpaceCreateDeviceRGB()似乎是唯一的选择。
经过一些测试后,我发现可以从CGImageRef获得嵌入的颜色配置文件,并使用该配置文件将颜色转换应用到另一个颜色空间,只要您自己进行颜色转换。Core仍然不支持在颜色空间之间转换图像,但是如果您有自己的颜色管理功能,现在就可以在iOS上自己实现了--这以前是不可能的。
我只想知道什么是有用的,什么是不可行的。我尝试过查看发布说明,并寻找描述从iOS 7到8和8到9的变化的技术注释,但是我没有找到任何描述CGColorSpace API变化的东西。有没有人知道是否有这样的文件?
发布于 2017-06-14 04:03:15
您的发现是正确的--在iOS 9之前,不支持ColorSync/CGColorSpace;所有图像资产都假定在设备的sRGB颜色空间( CGColorSpace https://web.archive.org/web/20140703180539/https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html文档)中。
因此,尽管CGColorSpace/CGColorSpaceRef存在于早期版本中,但它直到iOS 9.0才做任何事情。
所以你有几个选择:
值得注意的是,在过去一年左右,iPad Pro 9.7“(2016年)、iPad Pro 10.5”& 12.9“(2017年)、iPhone 7&7 Plus (2016年)以及这些产品系列中较新的机型都使用P3宽颜色空间(基于DCI P3)。
发布于 2016-11-29 12:12:55
您可以查看一个名为小CMS的开源库。它提供了良好的结果,你可以集成在你的应用程序。
https://stackoverflow.com/questions/35468964
复制相似问题