我有两个 CIFilter,曝光和色调。我需要将过滤器组合到一个 UIImage 上。我该怎么办?下面是我到目前为止所拥有的一些代码......
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"];
核心图像过滤器可以一个接一个地链接在一起。我发现如果按照这个想法编写代码,代码会更容易阅读(和编写)。
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];
上面创建了第一个过滤器。请注意可用的键常量的使用。在块的末尾,已为图像设置了过滤器,但直到渲染图像后才实际执行计算。应用的任何新过滤器都将被组合起来以实现最有效的操作。
然后,下一个块应用下一个过滤器,使用第一个过滤器的输出作为第二个过滤器的输入。这可以根据需要重复多次。通过编写上述代码,您可以根据需要轻松打开/关闭过滤器,甚至可以对它们重新排序(如果有多个过滤器)。
苹果的文档非常好,有很多例子:核心映像编程指南 https://developer.apple.com/library/ios/documentation/graphicsimaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)