一个CIImage中有多个CIFilter? [英] Multiple CIFilters in one CIImage?

查看:79
本文介绍了一个CIImage中有多个CIFilter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个CIFilter,曝光和色调。我需要将滤镜组合到一个UIImage上。我该怎么办?下面是我到目前为止所拥有的一些代码...

I have two CIFilters, exposure and hue. I need to combine the filters over one UIImage. How should i go about this? Below is some code that i have so far...

CIFilter *hueFilter;
CIFilter *exposureFilter;
CIImage *adjustedImage;

hueFilter = [CIFilter filterWithName:@"CIHueAdjust"];
exposureFilter = [CIFilter filterWithName:@"CIExposureAdjust"];
[hueFilter setValue:[NSNumber numberWithFloat:5] forKey: @"inputAngle"];
[exposureFilter setValue:[NSNumber numberWithFloat:5] forKey: @"inputEV"];

adjustedImage = [CIImage imageWithCGImage:inputCGImage];
[hueFilter setValue:adjustedImage forKey:@"inputImage"];
[exposureFilter setValue:adjustedImage forKey:@"inputImage"];


推荐答案

核心图像过滤器可以链接在一起,其他。我发现如果用这种想法编写的代码更易于阅读(和编写)。

Core Image filters can be chained together, one after the other. I find the code easier to read (and write) if it’s written with that idea.

CIFilter *hueFilter;
CIFilter *exposureFilter;
CIImage *inputImage; // assume this has already been created
CIImage *outputImage;

hueFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[hueFilter setValue:inputImage forKey:kCIInputImageKey];
[hueFilter setValue:[NSNumber numberWithFloat:5] forKey:@"inputAngle"];
outputImage = [hueFilter valueForKey:kCIOutputImageKey];

exposureFilter = [CIFilter filterWithName:@"CIExposureAdjust"];
[exposureFilter setValue:outputImage forKey:kCIInputImageKey];
[exposureFilter setValue:[NSNumber numberWithFloat:5] forKey:@"inputEV"];
outputImage = [exposureFilter valueForKey:kCIOutputImageKey];

上面,创建了第一个过滤器。请注意在可用的地方对键使用常量。在该块的末尾,已为图像设置了过滤器,但是直到渲染图像后才真正执行计算。

Above, the first filter is created. Note the use of the constants for the keys where available. At the end of the block the filter has been set for the image, but the calculations are not actually performed until the image is rendered. Any new filters applied will be combined for the most efficient operation.

然后,下一个块将应用下一个过滤器,并使用第一个过滤器的输出作为第二个过滤器的输入。可以根据需要重复多次。通过如上所述编写代码,您可以轻松地根据需要打开/关闭过滤器,如果有多个过滤器,甚至可以对其重新排序。

The next block then applies the next filter, using the output of the first filter as the input for the second. This can be repeated as many times as needed. By writing the code as above, you can easily turn on/off filters as needed, or even reorder them if you have several.

Apple的文档非常好,并且文档很多示例:《核心图像编程指南》

Apple’s documentation is very good and has many examples: Core Image Programming Guide.

这篇关于一个CIImage中有多个CIFilter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆