我想使用 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 时,此代码运行正常。
也许有些人可以发现我犯的错误?
答案 0 :(得分:0)
我在这里找到答案:Using a CIImage from CIColor in a CIFilter: getting empty image。
正如 user578205 所述:
您应该将生成的图像裁剪为beginImage大小,因为 生成的图像大小是无限的。我不知道为什么,但是 CIOverlayBlendMode不能容忍无限大小
在某种程度上它是有道理的:你如何对齐哪一个无限大小的两个图像?