OpenEXR поддерживается на iOS / macOS?
Я пытаюсь выяснить, поддерживается ли чтение файлов OpenEXR на iOS и macOS.
Вот что я узнал:
- В документах почти не упоминается OpenEXR, и там, где они говорят, что он поддерживается только в последних версиях macOS.
Тем не менее, официальные образцы 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.