Должен ли я установить цветовое пространство для 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.

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