[英]Cannot CIFilter image twice CGImage nil the seconds time
我将过滤器应用于自定义UIImageView类中的过滤图像,以便在设置“色相”时过滤图像。 但是,当我调用以下代码时,[[self image] CGImage]第一次返回正确的值。 [[self image] CGImage]周围的第二次为零,因此CIFilter返回也为零。
有一个更好的方法吗?
- (void)setHue:(CGFloat)aHue
{
hue = aHue;
NSLog( @"CG Image? %@", [[self image] CGImage] );
CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"];
[filter setDefaults];
[filter setValue:[CIImage imageWithCGImage:[[self image] CGImage]]
forKey:@"inputImage"];
NSLog( @"Setting new hue %f", aHue );
[filter setValue:[NSNumber numberWithFloat:aHue] forKey:@"inputAngle"];
[self setImage:[UIImage imageWithCIImage:[filter valueForKey:@"outputImage"]]];
NSLog( @"Output image %@", [self image] );
}
UIImage
可以由CGImage
或CIImage
来支持。 一次运行此函数并调用[UIImage imageWithCIImage]
,新的UIImage
现在由CIImage
支持。
这实际上很好,因为下一次此功能可以运行得更快! 您可以简单地检查一下CIImage
存在并直接使用它:
- (void)setHue:(CGFloat)aHue
{
hue = aHue;
NSLog( @"CG Image? %@", [[self image] CGImage] );
CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"];
[filter setDefaults];
if ([[self image] CGImage]) {
[filter setValue:[CIImage imageWithCGImage:[[self image] CGImage]] forKey:@"inputImage"];
}
else {
[filter setValue:[[self image] CIImage] forKey:@"inputImage"];
}
NSLog( @"Setting new hue %f", aHue );
[filter setValue:[NSNumber numberWithFloat:aHue] forKey:@"inputAngle"];
[self setImage:[UIImage imageWithCIImage:[filter valueForKey:@"outputImage"]]];
NSLog( @"Output image %@", [self image] );
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.