【发布时间】:2017-11-17 12:12:14
【问题描述】:
我正在寻找一种方法来检查 CGColorSpace 的 copyICCData() 方法提供的 ICC 颜色配置文件数据。
具体来说,我在 iOS 上将 PNG 图像加载到 UIImages 中,并试图找到一种方法来使用 let iccData:CFData? = aUIImage.cgImage!.colorSpace!.copyICCData() 来确定图像文件的伽玛值。这适用于使用 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 属性。所以我相信最有可能的答案是指向一些我无法通过 Google、GitHub、CocoaPods 或 StockOverflow 找到的库,并且很乐意接受。
【问题讨论】:
标签: ios cocoa-touch core-graphics gamma color-profile