OpenEXR поддерживается на iOS / macOS?

Я пытаюсь выяснить, поддерживается ли чтение файлов OpenEXR на iOS и macOS.

Вот что я узнал:

  1. В документах почти не упоминается OpenEXR, и там, где они говорят, что он поддерживается только в последних версиях macOS.
  2. Тем не менее, официальные образцы WWDC 2017 для ARKit просто загружают изображения.exr с:

    UIImage(named: "image.exr")
    

Это найдено в следующих официальных образцах:

  • Обработка трехмерного взаимодействия и элементов управления в дополненной реальности
  • Интерактивный контент с ARKit
  • Аудио в ARKit

Как поддержка OpenEXR на iOS и на MacOS?

1 ответ

Apple поддерживает OpenEXR в течение ряда лет через ImageIO/CGImageSource и API-интерфейсы, такие как UIImage, на верхнем уровне. По состоянию на 2-3 года назад также был добавлен низкоуровневый доступ в виде libAppleEXR.dylib #include <AppleEXR.h>, что может быть предпочтительнее, если вам нужно возиться с метаданными или иметь дело с форматами каналов, которые не отображают хорошо для RGBA/XYZ/YCbCr. Apple внесла значительные улучшения в эту область в ImageIO для Ventura, поэтому вам придется решить, подходит ли это. Поскольку Ventura на этой неделе все еще довольно новая, вероятно, вы не можете полагаться на то, что она будет установлена ​​везде. Для кубических карт, мипмапов, рипмапов и других форматов, больше похожих на GPU, вам обязательно нужно использовать libAppleEXR.

Общая иерархия в наши дни такова, что тяжелая работа выполняется AppleEXR, ImageIO вызывает это, а CoreGraphics/AppKit/UIKit/vImage вызывает ImageIO. Поддержка идентична для MacOS/iOS/tvOS/watchOS.

Поддержка линейных цветовых пространств EXR также была улучшена в Ventura. До этого сопоставление тонов, скорее всего, будет включать в себя отсечение, если вы не рисуете на поверхность рисования с расширенным диапазоном.

Если вы действительно хотите использовать API-интерфейсы библиотеки OpenEXR из своего приложения, вам необходимо загрузить исходный код и создать его для своего компьютера. ImageIO и libAppleEXR предоставляют интерфейсы программирования уровня C и не могут использовать интерфейсы OpenEXR C++ для включения в системную библиотеку из-за обычных проблем C++ со стабильным ABI.

Другие вопросы по тегам