Применение фильтра 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:

входное изображение | Объект CIImage с отображаемым именем Image.

входное фоновое изображение | Объект CIImage, отображаемое имя которого — Background Image.

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

Когда я заменяю CIScreenBlendMode на CIMultiplyCompositing, этот код работает нормально.

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


person Sjakelien    schedule 03.05.2016    source источник


Ответы (1)


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

Как утверждает user578205:

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

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

person Sjakelien    schedule 03.05.2016