Search code examples
objective-ccalayer

Blur CIImage as a CALayer Content image


I am using bellow code for image blur. 'resultImage' shows the blurred image, but when I put it on a CALayer content It shows nothing.

CIImage *imageToBlur = [CIImage imageWithCGImage:image.CGImage];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
self.contents = resultImage;

Solution

  • You cantn't use CIImage as a content of CALayer . There might be some VRM issue. I dont no more about it. By the way you may use CGImageRef instead of CIImage. Based on your code the thing you can do ...

    CIImage *imageToBlur = [CIImage imageWithCGImage:image.CGImage];
    CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
    [gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
    [gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
    CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
    CIContext *cont = [CIContext contextWithOptions:nil];
    CGImageRef img = [cont createCGImage:resultImage fromRect:CGRectMake(0, 0, image.size.width, image.size.height)];
    self.contents = (__bridge id)img;
    

    I hope it'll work!