在iOS 6上使用CIGaussianBlur和CIAffineClamp

9
我正在尝试在iOS 6上使用CoreImage模糊图像,而不会有明显的黑色边框。 苹果文档指出,使用CIAffineClamp滤镜可以实现此目的,但我无法从滤镜中获取输出图像。这是我尝试过的,但不幸的是当我访问[clampFilter outputImage]时,创建了一个空图像。如果我只执行模糊处理,则会产生一张图像,但带有深色内置边框。
CIImage *inputImage = [[CIImage alloc] initWithCGImage:self.CGImage];

CIContext *context = [CIContext contextWithOptions:nil];

CGAffineTransform transform = CGAffineTransformIdentity;

CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"];
[clampFilter setValue:inputImage forKey:kCIInputImageKey];
[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];

CIImage *outputImage = [clampFilter outputImage];

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"
     keysAndValues:kCIInputImageKey, outputImage, @"inputRadius", [NSNumber numberWithFloat:radius], nil];

outputImage = [blurFilter outputImage];

CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *blurredImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
1个回答

15

CIAffineClamp 过滤器将您的范围设置为无限,这会使您的上下文混乱。尝试保存预夹紧范围 CGRect,并将其提供给上下文初始化程序。


4
问题出在contextRect上。我通过在代码末尾创建CGImage时将这一行改为使用inputImage extent来修复了它:CGImageRef cgimg = [context createCGImage:outputImage fromRect:inputImage.extent]; - bryguy1300

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接