在iOS上检查CGColorSpace ICC颜色配置文件数据

时间:2017-06-15 06:23:36

标签: ios cocoa-touch core-graphics gamma color-profile

我正在寻找一种方法来检查CGColorSpace copyICCData()方法提供的ICC颜色配置文件数据。

具体来说,我正在iOS上的UIImage中加载PNG图像,并试图找到一种方法来使用let iccData:CFData? = aUIImage.cgImage!.colorSpace!.copyICCData()来确定图像文件的gamma值。这是针对使用3D渲染的游戏 - 如果源图像具有标准2.2伽玛,我将图像数据加载到纹理中作为sRGB (例如MTLPixelFormatRGBA8Unorm_sRGB,如果它有一个1.0的伽玛,我会把它加载为线性纹理(例如MTLPixelFormatRGBA8Unorm

注意:将UIImage / CGImage传递给渲染系统(SceneKit / Metal)并让它排序的解决方案在这里不起作用,因为:1。我正在做的渲染是将2D图像组合成3D纹理,这是我需要对原始数据做的事情,而不是我可以从标准图像文件格式中读取的东西; 2.我特意尝试将gamma-1.0图像传递到渲染系统,以避免sRGB→线性转换(渲染在线性空间中)的开销。

此外:手动ICC解析解决方案,Apple-API使用解决方案和开源库建议都是可接受的答案。这不是专门针对工具推荐的查询 - 任何可行的解决方案都是一个好的解决方案 - 但在我的研究中,手动ICC解析会很笨拙而且Apple的API似乎没有公开任何ICC属性。所以我认为最可能的答案是指向那些我无法通过Google或GitHub或CocoaPods或StockOverflow找到的图书馆的指针,并且很乐意接受。

1 个答案:

答案 0 :(得分:0)

您最好的选择是使用示例icc'https://sourceforge.net/projects/sampleicc/'。只需按照描述获取配置文件数据,然后使用OpenIccProfile加载它。从那里获得引用结构(.m_Header)的引用并提取所需的信息。我还建议你看一下RefIccMax'https://github.com/InternationalColorConsortium/RefIccMAX'这是同一个lib的较新版本,但尚未准备好进入黄金时段。