您的位置:首页 > 移动开发 > IOS开发

[绍棠] 高斯模糊效果汇总

2017-02-15 11:50 417 查看
一. iOS7之前

创建一个UIToolbar实例,设置它的frame或者也可以通过添加约束

然后UIToolbar有一个属性:barStyle,设置对应的枚举值来呈现毛玻璃的样式,最后再添加到需要进行毛玻璃效果的view上即可.

?


二. iOS8

实例化UIBlurEffect并设置毛玻璃的样式,然后再通过UIVisualEffectView的构造方法将UIBlurEffect的实例添加上去最后设置frame或者是通过添加约束, 将effectView添加到要实现了毛玻璃的效果的view控件上,效果图和上面的一样.

?


三. 导入

#import <Accelerate/Accelerate.h>

+(UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur
{

    if (blur <0.f || blur >1.f) {

        blur = 0.5f;

    }

    int boxSize = (int)(blur *40);

    boxSize = boxSize - (boxSize % 2) +1;

    

    CGImageRef img = image.CGImage;

    

    vImage_Buffer inBuffer, outBuffer;

    vImage_Error error;

    

    void *pixelBuffer;

    //从CGImage中获取数据

    CGDataProviderRef inProvider =CGImageGetDataProvider(img);

    CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);

    //设置从CGImage获取对象的属性

    inBuffer.width =CGImageGetWidth(img);

    inBuffer.height =CGImageGetHeight(img);

    inBuffer.rowBytes =CGImageGetBytesPerRow(img);

    

    inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);

    

    pixelBuffer = malloc(CGImageGetBytesPerRow(img) *

                         CGImageGetHeight(img));

    

    if(pixelBuffer ==NULL)

        NSLog(@"No pixelbuffer");

    

    outBuffer.data = pixelBuffer;

    outBuffer.width =CGImageGetWidth(img);

    outBuffer.height =CGImageGetHeight(img);

    outBuffer.rowBytes =CGImageGetBytesPerRow(img);

    

    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0,
boxSize, boxSize,NULL,
kvImageEdgeExtend);

    

    if (error) {

        NSLog(@"error from convolution %ld", error);

    }

    

    CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();

    CGContextRef ctx =CGBitmapContextCreate(

                                             outBuffer.data,

                                             outBuffer.width,

                                             outBuffer.height,

                                             8,

                                             outBuffer.rowBytes,

                                             colorSpace,

                                             kCGImageAlphaNoneSkipLast);

    CGImageRef imageRef =CGBitmapContextCreateImage (ctx);

    UIImage *returnImage = [UIImageimageWithCGImage:imageRef];

    

    //clean up

    CGContextRelease(ctx);

    CGColorSpaceRelease(colorSpace);

    

    free(pixelBuffer);

    CFRelease(inBitmapData);

    

    CGColorSpaceRelease(colorSpace);

    CGImageRelease(imageRef);

    

    return returnImage;

}

调用

self.imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(0,300,SCREENWIDTH,100)];

    self.imageView.contentMode=UIViewContentModeScaleAspectFill;

    self.imageView.image=[UIImageboxblurImage:[UIImageimageNamed:@"Person"]withBlurNumber:0.5];

    self.imageView.clipsToBounds=YES;

    [self.viewaddSubview:self.imageView]

github地址: https://github.com/happycoco/UIimageBlur
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 高斯模糊