首页 > 解决方案 > 在图像上应用多个 CIFilter

问题描述

我在图像上添加多个 CIFilter 时遇到问题,当我添加亮度过滤器然后尝试添加对比度图像时,会转到原始图像(丢失亮度过滤器),然后添加对比度过滤器。

- (IBAction)brightnessSlider:(NSSlider*)sender {
    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, originalCIImage, @"inputBrightness", [NSNumber numberWithFloat:[sender floatValue]], nil];
    controller.imageView.image = [self fromCIImageToNSImage:[brightness outputImage]];
}

- (IBAction)contrastSlider:(id)sender {
    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    CIFilter *contrast = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, originalCIImage, @"inputContrast", [NSNumber numberWithFloat:[sender floatValue]], nil];
    controller.imageView.image = [self fromCIImageToNSImage:[contrast outputImage]];
}

如果我originalCIImage = [CIFilter outputImage];在添加亮度和对比度(为更改的图像应用滤镜)之后使用(CIFilter = 亮度/对比度),那么图像将完全变为黑色/灰色/白色。

如何防止图像变回原始图像并同时应用多个滤镜?

我已阅读该帖子的此帖子答案链接,但将过滤器应用于原始图像只会重置图像,因为它应该..

标签: objective-cmacoscocoa

解决方案


如果您单击第一个按钮,您的代码将对原始图像应用一个过滤器,如果您单击另一个按钮,则会对原始图像应用不同的过滤器。

如果要应用 2 个过滤器,则需要编写获取原始图像的代码,将其输入第一个过滤器的输入,设置其他参数,然后将输出输入另一个 CIImage。

然后您需要将第一个过滤器的输出作为第二个过滤器的输入输入,设置这些参数等。

起泡、冲洗、重复任意数量的过滤器。

请参阅此链接以获取 Swift 中的工作示例代码:https ://www.objc.io/issues/21-camera-and-photos/core-image-intro/


推荐阅读