iOS view模糊背景

 1 /**
 2  *  模糊背景
 3  *
 4  *  @param image    需要模糊的图片
 5  *  @param blur     高斯模糊的值
 6  *
 7  *  @return
 8  */
 9 - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur
10 {
11     if ((blur < 0.0f) || (blur > 1.0f)) {
12         blur = 0.5f;
13     }
14     
15     int boxSize = (int)(blur * 100);
16     boxSize -= (boxSize % 2) + 1;
17     
18     CGImageRef img = image.CGImage;
19     
20     vImage_Buffer inBuffer, outBuffer;
21     vImage_Error error;
22     void *pixelBuffer;
23     
24     CGDataProviderRef inProvider = CGImageGetDataProvider(img);
25     CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
26     
27     inBuffer.width = CGImageGetWidth(img);
28     inBuffer.height = CGImageGetHeight(img);
29     inBuffer.rowBytes = CGImageGetBytesPerRow(img);
30     inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
31     
32     pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
33     
34     outBuffer.data = pixelBuffer;
35     outBuffer.width = CGImageGetWidth(img);
36     outBuffer.height = CGImageGetHeight(img);
37     outBuffer.rowBytes = CGImageGetBytesPerRow(img);
38     
39     error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
40     
41     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
42     CGContextRef ctx = CGBitmapContextCreate(outBuffer.data, outBuffer.width, outBuffer.height, 8, outBuffer.rowBytes, colorSpace, CGImageGetBitmapInfo(image.CGImage));
43     
44     CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
45     UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
46     
47     //clean up
48     CGContextRelease(ctx);
49     CGColorSpaceRelease(colorSpace);
50     
51     free(pixelBuffer);
52     CFRelease(inBitmapData);
53     
54     CGColorSpaceRelease(colorSpace);
55     CGImageRelease(imageRef);
56     
57     return returnImage;
58 }

 

posted on 2015-06-23 17:16  airy99  阅读(456)  评论(0编辑  收藏  举报