Применение фильтра CIScreenBlendMode

Я хочу смешать изображение с синим цветом, используя фильтр CIScreenBlendMode.

Для этого я использую следующий код:

-(CIImage*)makeitBlue:(CIImage*)greyImage{

    CIImage* outputImage = nil;

    //create some blue
    CIFilter* blueGenerator = [CIFilter filterWithName:@"CIConstantColorGenerator"];
    CIColor* blue = [CIColor colorWithString:@"0.1 0.5 0.8 1.0"];
    [blueGenerator setValue:blue forKey:@"inputColor"];
    CIImage* blueImage = [blueGenerator valueForKey:@"outputImage"];

    //apply a screen filter
    CIFilter* filter = [CIFilter filterWithName:@"CIScreenBlendMode"];
    [filter setValue:blueImage forKey:@"inputImage"];
    [filter setValue:greyImage forKey:@"inputBackgroundImage"];
    outputImage = [filter valueForKey:@"outputImage"];

    return outputImage;

}

Этот метод делает мое приложение сбой, и я не знаю, почему.

В своей документации Apple указывает следующие параметры для CIScreenBlendMode:

inputImage / объект CIImage с отображаемым именем Image.

inputbackgroundimage / объект CIImage с отображаемым именем
фоновое изображение.

Я думаю, что это именно то, что я предоставляю.

При замене CIScreenBlendMode на CIMultiplyCompositing этот код выполняется нормально.

Может, кто-то из вас заметит мою ошибку?

1 ответ

  1. Я нашел ответ здесь: использование CIImage от CIColor в CIFilter: получение пустого изображения .

    As user578205 государства:

    Необходимо обрезать сгенерированное изображение до размера beginImage, потому что
    размер генерируемого изображения бесконечен. Не знаю почему, но
    CIOverlayBlendMode не является толерантным к бесконечному размеру

    И в каком-то смысле это имеет смысл: как можно совместить два образа, один из которых имеет бесконечный размер?