objective-c - 在图像上应用多个 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 = 亮度/对比度),那么图像将完全变为黑色/灰色/白色。
如何防止图像变回原始图像并同时应用多个滤镜?
我已阅读该帖子的此帖子答案链接,但将过滤器应用于原始图像只会重置图像,因为它应该..
解决方案
如果您单击第一个按钮,您的代码将对原始图像应用一个过滤器,如果您单击另一个按钮,则会对原始图像应用不同的过滤器。
如果要应用 2 个过滤器,则需要编写获取原始图像的代码,将其输入第一个过滤器的输入,设置其他参数,然后将输出输入另一个 CIImage。
然后您需要将第一个过滤器的输出作为第二个过滤器的输入输入,设置这些参数等。
起泡、冲洗、重复任意数量的过滤器。
请参阅此链接以获取 Swift 中的工作示例代码:https ://www.objc.io/issues/21-camera-and-photos/core-image-intro/
推荐阅读
- excel - 格式化每个工作表中的单元格
- neo4j - 如何使用 neo4j 浏览器通过 bolt 连接到 neo4j 嵌入式实例?
- c# - 为什么 ComboBox 在 WPF MVVM 中输入了不同的值?
- r - 根据 R 中另一个数据帧的时间范围更改 id?
- haskell - 如何在没有 ghci 的情况下找出 haskell 表达式的类型?
- pandas - 纳斯达克仅支持字符串“符号”
- dart - 将“uint8list”字符串转换为 Unit8List
- token - EOS 自定义代币转账?
- ruby-on-rails - Active Record Array 数组查询 - 检查数组中存在的记录
- hashmap - Perl 哈希不能按预期工作