objective-c - 在图像上应用多个 CIFilter

标签 objective-c macos cocoa

我在图像上添加多个 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 = 亮度/对比度),则图像将完全变成黑色/灰色/白色.

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

我已阅读这篇文章的答案link of the post但对原始图像应用滤镜只会重置图像,因为它应该......

最佳答案

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

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

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

起泡沫,冲洗,根据需要重复多次过滤器。

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

关于objective-c - 在图像上应用多个 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110550/

相关文章:

macos - 无法为 Mac OS X 加载 native hadoop 库

macos - 如何编译: Synergy on mac

c++ - MacOS 上的 Clang 包含问题

objective-c - 有没有办法在 NSString stringWithFormat 中指定参数位置/索引?

ios - 如何检测iOS设备是否使用同一网络?

Swift NSWindow 固定位置

iPhone 应用程序随机崩溃,没有任何错误或堆栈跟踪

ios - 如何在项目之间添加ARC

objective-c - 将元素放入部分数组的大条件,更好的方法吗? - Objective-C

ios - NSDate 与不同时区的另一个 NSDate 的本地时间相同