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

实现毛玻璃效果 - iOS开发

2014-03-28 16:03 375 查看
实现思路:先截屏,然后再对截得屏实现毛玻璃效果1.截取屏幕- (UIImage *)getScreenShot{
    UIGraphicsBeginImageContext(self.view.bounds.size);[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *screenShotImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();NSData *imageData        = UIImageJPEGRepresentation(screenShotImage, 0.7);screenShotImage          = [UIImage imageWithData:imageData];return screenShotImage;}
2.对截取的屏幕实现毛玻璃效果
//加模糊效果,image是图片,blur是模糊度- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {//模糊度,if ((blur < 0.1f) || (blur > 2.0f)) {blur = 0.5f;}//boxSize必须大于0int boxSize = (int)(blur * 100);boxSize -= (boxSize % 2) + 1;NSLog(@"boxSize:%i",boxSize);//图像处理CGImageRef img = image.CGImage;//需要引入#import <Accelerate/Accelerate.h>/*This document describes the Accelerate Framework, which contains C APIs for vector and matrix math, digital signal processing, large number handling, and image processing.本文档介绍了Accelerate Framework,其中包含C语言应用程序接口(API)的向量和矩阵数学,数字信号处理,大量处理和图像处理。*///图像缓存,输入缓存,输出缓存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);//宽,高,字节/行,datainBuffer.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 = CGImageGe4000tWidth(img);outBuffer2.height = CGImageGetHeight(img);outBuffer2.rowBytes = CGImageGetBytesPerRow(img);//Convolves a region of interest within an ARGB8888 source image by an implicit M x N kernel that has the effect of a box filter.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));//颜色空间DeviceRGBCGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();//用图片创建上下文,CGImageGetBitsPerComponent(img),7,8CGContextRef 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 upCGContextRelease(ctx);CGColorSpaceRelease(colorSpace);free(pixelBuffer);free(pixelBuffer2);CFRelease(inBitmapData);CGColorSpaceRelease(colorSpace);CGImageRelease(imageRef);return returnImage;}
高级iOS开发技术交流群:415239068,欢迎大家加入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: