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

iOS7 设置背景图片或导航为毛玻璃效果

2014-11-05 21:34 369 查看
1.首先导入系统库 Accelerate.framework2.其次在要实现毛玻璃效果的页面添加头文件 #import <Accelerate/Accelerate.h>3.再次添加实现函数如下:
//加模糊效果函数,传入参数:image是图片,blur是模糊度(0~2.0之间)- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur{    //模糊度,    if ((blur < 0.1f) || (blur > 2.0f))    {        blur = 0.5f;    }        //boxSize必须大于0    int boxSize = (int)(blur * 100);    boxSize -= (boxSize % 2) + 1;    NSLog(@"boxSize:%i",boxSize);    //图像处理    CGImageRef img = image.CGImage;        //图像缓存,输入缓存,输出缓存    vImage_Buffer inBuffer, outBuffer;    vImage_Error error;    //像素缓存    void *pixelBuffer;        //数据源提供者,Defines an opaque type that supplies Quartz with data.    CGDataProviderRef inProvider = CGImageGetDataProvider(img);    // provider’s data.    CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);        //宽,高,字节/行,data    inBuffer.width = CGImageGetWidth(img);    inBuffer.height = CGImageGetHeight(img);    inBuffer.rowBytes = CGImageGetBytesPerRow(img);    inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);        //像数缓存,字节行*图片高    pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));        outBuffer.data = pixelBuffer;    outBuffer.width = CGImageGetWidth(img);    outBuffer.height = CGImageGetHeight(img);    outBuffer.rowBytes = CGImageGetBytesPerRow(img);        // 第三个中间的缓存区,抗锯齿的效果    void *pixelBuffer2 = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));    vImage_Buffer outBuffer2;    outBuffer2.data = pixelBuffer2;    outBuffer2.width = CGImageGetWidth(img);    outBuffer2.height = CGImageGetHeight(img);    outBuffer2.rowBytes = CGImageGetBytesPerRow(img);        //将一个隐式的M×N区域颗粒和具有箱式滤波器的效果的ARGB8888源图像进行卷积运算得到作用区域。    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer2, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);    error = vImageBoxConvolve_ARGB8888(&outBuffer2, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);            if (error)    {        NSLog(@"error from convolution %ld", error);    }        //    NSLog(@"字节组成部分:%zu",CGImageGetBitsPerComponent(img));    //颜色空间DeviceRGB    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();    //用图片创建上下文,CGImageGetBitsPerComponent(img),7,8    CGContextRef ctx = CGBitmapContextCreate(                                             outBuffer.data,                                             outBuffer.width,                                             outBuffer.height,                                             8,                                             outBuffer.rowBytes,                                             colorSpace,                                             CGImageGetBitmapInfo(image.CGImage));        //根据上下文,处理过的图片,重新组件    CGImageRef imageRef = CGBitmapContextCreateImage (ctx);    UIImage *returnImage = [UIImage imageWithCGImage:imageRef];        //clean up    CGContextRelease(ctx);    CGColorSpaceRelease(colorSpace);        free(pixelBuffer);    free(pixelBuffer2);    CFRelease(inBitmapData);        CGImageRelease(imageRef);        return returnImage;}
4.使用的时候直接传入所需参数,将返回的image直接运行就可以了UIImage * maoImage = [UIImage imageNamed:@"aboutBackImage.jpg"];;        tabBarImage.image = [self blurryImage:maoImage withBlurLevel:0.5];
大功告成,(*^__^*) ……小伙伴们快去试试效果吧~
转载:http://blog.csdn.net/illusion21/article/details/39054537
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: