实现毛玻璃效果 - 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,欢迎大家加入
相关文章推荐
- Xcode把应用程序打包成ipa
- 【IOS-博客】IOS牛人博客一览表
- 【李明杰老师分享】iOS图片拉伸技巧
- IOS ipad拍照问题
- iOS7.1 编译报错 解决方案 体会
- IOS基础 第二课
- armv6, armv7, armv7s的区别
- 国际化 - iOS开发
- iOS常用代码,拿来即用
- IOS基础 第一课
- IOS开发学习常用宏定义
- IOS开发常用宏定义的总结
- mac下svn客户端Versions的基本使用方法
- IOS开发使用宏定义
- IOS使用僵尸对象调试内存管理
- 从今天开始学习iOS开发(iOS 7版)--实现一款App之合并数据
- iOS 获取全局唯一标示符
- iOS 获取全局唯一标示符
- iOS 获取全局唯一标示符
- IOS开发之——keychain使用介绍 -存储用户敏感信息