我正在尝试在iOS 6上使用CoreImage来模糊图像而没有明显的黑色边框。 Apple documentation指出,使用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);
最佳答案
CIAffineClamp过滤器将范围设置为无穷大,然后混淆了上下文。尝试保存预钳位范围CGRect,然后将其提供给上下文初始化程序。