iOS / macOS 是否支持 OpenEXR?

hyp*_*not 6 macos cocoa cocoa-touch openexr ios

我想知道在 iOS 和 macOS 上是否支持读取 OpenEXR 文件。

这是我发现的:

  1. 文档几乎没有提到 OpenEXR,他们在哪里说它只在最近的 macOS 上受支持。
  2. 然而,ARKit 的官方 WWDC 2017 示例只是简单地加载 .exr 图像:

    UIImage(named: "image.exr")
    
    Run Code Online (Sandbox Code Playgroud)

这可以在以下官方示例中找到:

  • 在增强现实中处理 3D 交互和 UI 控件
  • 与 ARKit 交互的内容
  • ARKit 中的音频

iOS 和 macOS 上的 OpenEXR 支持如何?

Ian*_*ann 0

Apple 多年来一直通过 ImageIO / CGImageSource 以及顶层的 UIImage 等 API 支持 OpenEXR。截至 2-3 年前,还以 libAppleEXR.dylib #include <AppleEXR.h> 的形式添加了低级访问,如果您需要处理元数据或处理不映射的通道格式,这可能是更好的选择以及 RGBA/XYZ/YCbCr。Apple 在这方面对 ImageIO for Ventura 进行了相当大的改进,因此您必须决定这是否合适。由于 Ventura 本周仍然很新,因此您可能不能依赖它在任何地方安装。对于立方体贴图、mipmap、ripmap 和其他更多 GPU 风格的格式,您肯定会想要使用 libAppleEXR。

如今的整体层次结构是繁重的工作由 AppleEXR 完成,ImageIO 调用它,而 CoreGraphics/AppKit/UIKit/vImage 调用 ImageIO。MacOS/iOS/tvOS/watchOS 的支持是相同的。

Ventura 还改进了对 EXR 线性色彩空间的支持。在此之前,如果您不绘制到扩展范围的绘图表面,则色调映射可能只涉及剪切。

如果您确实想在应用程序中使用 OpenEXR 库 API,则需要下载源代码并为您的计算机构建该源代码。ImageIO 和 libAppleEXR 提供 C 级编程接口,并且由于稳定 ABI 的常见 C++ 问题,无法采用 OpenEXR 的 C++ 接口包含到系统库中。