iOS中的模糊效果
来源:互联网 发布:windows窗口样式 编辑:程序博客网 时间:2024/05/17 20:14
App设计时往往会用到一些模糊效果。iOS目前已提供一些模糊API可以让我们方便是使用。一种是使用Core Image,另一种是使用Accelerate.Framework中的vImage API。
使用Core Image进行模糊
Core Image很早在Mac系统中得到应用,后来这个Framework也开始应用到iOS,不过直到iOS6.0才开始支持模糊。这个API调用起来很方便简洁。
- - (UIImage *)blurryImage:(UIImage *)image
- withBlurLevel:(CGFloat)blur {
- CIImage *inputImage = [CIImage imageWithCGImage:image.CGImage];
- CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"
- keysAndValues:kCIInputImageKey, inputImage,
- @"inputRadius", @(blur),
- nil];
- CIImage *outputImage = filter.outputImage;
- CGImageRef outImage = [self.context createCGImage:outputImage
- fromRect:[outputImage extent]];
- return [UIImage imageWithCGImage:outImage];
- }
使用vImage API进行模糊
iOS5.0中新增了vImage API可以使用,它属于Accelerate.Framework,所以如果你要使用它要在工程中加入这个Framework。模糊算法使用的是vImageBoxConvolve_ARGB8888这个函数。
- - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {
- if (blur < 0.f || blur > 1.f) {
- blur = 0.5f;
- }
- int boxSize = (int)(blur * 100);
- boxSize = boxSize - (boxSize % 2) + 1;
- CGImageRef img = image.CGImage;
- vImage_Buffer inBuffer, outBuffer;
- vImage_Error error;
- void *pixelBuffer;
- CGDataProviderRef inProvider = CGImageGetDataProvider(img);
- CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
- 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 = [UIImage imageWithCGImage:imageRef];
- //clean up
- CGContextRelease(ctx);
- CGColorSpaceRelease(colorSpace);
- free(pixelBuffer);
- CFRelease(inBitmapData);
- CGColorSpaceRelease(colorSpace);
- CGImageRelease(imageRef);
- return returnImage;
- }
0 0
- iOS中的模糊效果
- iOS中的模糊效果
- iOS中的模糊效果
- IOS中的模糊效果
- iOS中的模糊效果
- iOS中的模糊效果
- iOS中的模糊视图效果
- iOS图片模糊效果
- iOS实现模糊效果
- iOS模糊效果
- ios图片模糊效果
- ios 7 模糊效果
- ios 模糊效果
- iOS 模糊效果
- 浅谈iOS模糊效果
- iOS 模糊效果实现
- iOS之模糊效果
- iOS图片模糊效果
- python文件从windows到linux换行符的变化
- 开发笔记之NSTable 排序
- 整数划分系列问题(动态规划)
- ios中UI控件的继承关系
- 唐巧的博客地址
- iOS中的模糊效果
- IOS开发网络篇之──ASIHTTPRequest详解
- OnInitUpdate、OnUpdate、OnDraw与OnPaint!
- 阅读笔记1
- 超级牛B编码王(二):Sublime2之Zencoding快速上手 (转)
- Machine Learning on Spark——第三节 统计基础(一)
- HDU 3037 Saving Beans (Lucas定理)
- 《Linux内核完全剖析——基于0.12内核》第3章P31 引导扇区源代码boot.s
- Oracle新建用户并指定默认表空间