我正在寻找一种方法来检查提供的 ICC 颜色配置文件数据CGColorSpace
的copyICCData()
方法。
具体来说,我正在将 PNG 图像加载到UIImage
iOS 上的 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 找到的库,我很乐意接受。