CIColorInvert и CIColorMatrix неправильно инвертируют изображение

Я застрял на инвертировании цветов CIImage. Я создаю CIImage из CGImage, а затем применяю фильтр CIColorInvert или фильтр CIColorMatrix, но ни один из них не работает должным образом. При рендеринге CIImage как CGImage я получаю результаты, которые кажутся насыщенными (см. прикрепленный пример).

примеры инвертирования цвета с использованием различных подходов

Я предполагаю, что проблема в цветовом пространстве, но я понятия не имею, как это исправить. Я следовал руководству по программированию основного изображения (глава: Подкласс CIFilter: рецепты для пользовательских эффектов, раздел: Подкласс CIFilter для создания фильтра CIColorInvert), но безуспешно.

Буду очень благодарен за любые подсказки...


person marek.pivovarnik    schedule 02.04.2016    source источник
comment
Как у вас установлен inputbiasvector?   -  person Roecrew    schedule 16.04.2016
comment
Входной вектор смещения следующий: invertFilter?.setValue(CIVector(x: 1.0, y: 1.0, z: 1.0, w: 0), forKey: "inputBiasVector"). Большое спасибо за проявленный интерес и не поймите меня неправильно, но я только что нашел решение. Я не работал над этим, и вы напомнили мне об этой проблеме, поэтому я пытался углубиться в нее. Я предоставлю решение по этому вопросу в ответ.   -  person marek.pivovarnik    schedule 17.04.2016


Ответы (1)


Проблема была в рабочем цветовом пространстве. Я нашел ответ на свой вопрос здесь. CIContext, который я создаю, теперь выглядит следующим образом:

var ciContext = CIContext(options: [
    kCIImageColorSpace: NSNull(), 
    kCIImageProperties: NSNull(), 
    kCIContextWorkingColorSpace: NSNull()
])

Честно говоря, я не знаю точно предысторию, поэтому я не уверен, почему это не работает без установки WorkingColorSpace в NSNull. Если кто-то знает, я был бы очень благодарен за объяснение.

person marek.pivovarnik    schedule 17.04.2016