Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CIGaussianBlur and CIAffineClamp on iOS 6

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);
like image 699
bryguy1300 Avatar asked Oct 16 '12 08:10

bryguy1300


People also ask

Is ciimage available in iOS 6?

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.

How to make an image blocky in iOS 9?

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.

What is the display name of a CI image?

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.

What is the cishadedmaterial filter in iOS?

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.


1 Answers

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.

like image 114
schimonster Avatar answered Oct 21 '22 15:10

schimonster