0

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

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

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

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

4

1 回答 1

0

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

于 2017-06-16T05:27:19.123 回答