Проверьте данные цветового профиля CGColorSpace ICC на iOS

Я ищу способ проверить предоставленные данные цветового профиля ICC CGColorSpace ' s метод copyICCData().

В частности, я загружаю изображения PNG в UIImage на iOS и пытаюсь найти способ использования let iccData:CFData? = aUIImage.cgImage!.colorSpace!.copyICCData() для определения гаммы файла изображения. Это для игры, в которой используется 3D-рендеринг - если исходное изображение имеет стандартную гамму 2,2, я загружаю данные изображения в текстуру как sRGB (например, MTLPixelFormatRGBA8Unorm_sRGB), и если она имеет гамму 1.0 Вместо этого я загружу его как линейную текстуру (например, MTLPixelFormatRGBA8Unorm).

Примечание: решение просто передать _7 _ / _ 8_ в систему рендеринга (SceneKit / Metal) и позволить ему разобраться в этом здесь не сработает, потому что: 1. Я выполняю некоторую часть рендеринга, собирая 2D-изображения. в 3D-текстуру, так что это то, что мне нужно делать с необработанными данными, а не то, что я могу просто прочитать из стандартного формата файла изображения; 2. Я специально пытаюсь передать изображения гамма-1.0 в систему рендеринга, чтобы избежать накладных расходов на sRGB → линейное преобразование (рендеринг выполняется в линейном пространстве).

Также: решения для ручного анализа ICC, решения с использованием Apple API и предложения библиотек с открытым исходным кодом - все это приемлемые ответы. Это не конкретный запрос на рекомендацию инструмента - любое решение, которое будет работать, является хорошим, но, по моим исследованиям, ручной анализ ICC был бы громоздким, а API Apple, похоже, не раскрывают какие-либо свойства ICC. Поэтому я считаю, что наиболее вероятным ответом будет указатель на какую-то библиотеку, которую я не смог найти через Google, GitHub, CocoaPods или StockOverflow, и будет с радостью принят.


person Slipp D. Thompson    schedule 15.06.2017    source источник


Ответы (1)


Лучше всего использовать образец icc 'https://sourceforge.net/projects/sampleicc/ '. Просто получите данные профиля, как вы описали, а затем используйте OpenIccProfile для их загрузки. Оттуда получите ссылку на структуру заголовка (.m_Header) и извлеките необходимую информацию. Я также рекомендую вам взглянуть на https://github.com/InternationalColorConsortium/RefIccMAX ', которая является более новой версией той же библиотеки, но не готова к использованию в прайм-тайм.

person Alex    schedule 16.06.2017