应用CIScreenBlendMode过滤器

时间:2016-05-03 15:39:53

标签: ios cifilter

我想使用 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对象   背景图片。

我认为这正是我所提供的。

当我用 CIMultiplyCompositing 替换 CIScreenBlendMode 时,此代码运行正常。

也许有些人可以发现我犯的错误?

1 个答案:

答案 0 :(得分:0)

我在这里找到答案:Using a CIImage from CIColor in a CIFilter: getting empty image

正如 user578205 所述:

  

您应该将生成的图像裁剪为beginImage大小,因为   生成的图像大小是无限的。我不知道为什么,但是   CIOverlayBlendMode不能容忍无限大小

在某种程度上它是有道理的:你如何对齐哪一个无限大小的两个图像?