Должен ли я установить цветовое пространство для CIImage или CIContext?
Базовое изображение позволяет нам указать цветовое пространство для CIContext, как в:
let context = CIContext(options: [kCIContextOutputColorSpace: NSNull(),
kCIContextWorkingColorSpace: NSNull()])
Или для CIImage, как в:
let image = CIImage(cvImageBuffer: inputPixelBuffer,
options: [kCIImageColorSpace: NSNull()])
Как связаны эти три:
- kCIContextOutputColorSpace
- kCIContextWorkingColorSpace
- kCIImageColorSpace
Каковы плюсы и минусы настройки каждого из них?
1 ответ
Документация Apple объясняет различия:
рабочийЦветПространство
Ключ цветового пространства, используемого для операций с изображениями.
Рабочее цветовое пространство определяет цветовое пространство, используемое при выполнении ядер фильтров; Core Image автоматически преобразует исходное и целевое цветовое пространство входных изображений и выходных контекстов и обратно. Вы указываете рабочее цветовое пространство, используя ключworkColorSpace в словаре параметров при создании контекста основного изображения.
выходное цветовое пространство
Ключ цветового пространства, используемого для изображений перед их рендерингом в контексте. По умолчанию Core Image использует цветовое пространство GenericRGB, оставляя соответствие цветов системе.
Чтобы запросить, чтобы Core Image не выполнял управление цветом, укажите объект NSNull в качестве значения этого ключа. Используйте эту опцию для изображений, которые не содержат данных о цвете (например, карты высот, векторные карты нормалей и таблицы выборочных функций).
Если изображения помечены цветовым пространством, перед фильтрацией они преобразуются в линейное рабочее пространство. Если вы пометите CIImage с помощьюDeviceRGB
, перед фильтрацией гамма-коррекция становится линейной.
Установка ключей наNSNull
инструктирует CoreImage оставить значения цвета такими, какие они есть, что называетсяunmanaged color space
.