I am trying to blur an image using CoreImage on iOS 6 without having a noticeable black border. Apple documentation states that using a CIAffineClamp filter can achieve this but I'm not able to get an output image from the filter. Here's what I tried, but unfortunately an empty image is created when I access the [clampFilter outputImage]. If I only perform the blur an image is produced, but with the dark inset border.
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);
Available in OS X v10.4 and later and in iOS 6.0 and later. Transitions from one image to another by simulating a curling page, revealing the new image as the page curls. A CIImage object whose display name is Image. A CIImage object whose display name is Target Image.
Available in OS X v10.5 and later and in iOS 9 and later. Makes an image blocky by mapping the image to colored squares whose color is defined by the replaced pixels. A CIImage object whose display name is Image. A CIVector object whose attribute type is CIAttributeTypePosition and whose display name is Center.
A CIImage object whose display name is Image. A CIVector object whose attribute type is CIAttributeTypeRectangle and whose display name is Rectangle. The size and shape of the cropped image depend on the rectangle you specify. Available in OS X v10.4 and later and in iOS 5.0 and later.
You can use this filter with the CIShadedMaterial filter to produce extremely realistic shaded objects. Available in OS X v10.4 and later and in iOS 9 and later. Maps an image to colored hexagons whose color is defined by the replaced pixels. A CIImage object whose display name is Image.
The CIAffineClamp filter is setting your extent as infinite, which then confounds your context. Try saving off the pre-clamp extent CGRect, and then supplying that to the context initializer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With