高斯模糊 毛玻璃 可以调节模糊度
来源:互联网 发布:ubuntu安装自动分区 编辑:程序博客网 时间:2024/06/10 07:42
1、框架
Accelerate.framework。
2、头文件
#import <Accelerate/Accelerate.h>
// 高斯模糊
-(UIImage*)getBlurImage:(UIImage*)image
{
return [selfgaussBlur:0.2andImage:image];
}
- (UIImage*)gaussBlur:(CGFloat)blurLevel andImage:(UIImage*)originImage
{
blurLevel = MIN(1.0,MAX(0.0, blurLevel));
//int boxSize = (int)(blurLevel * 0.1 * MIN(self.size.width, self.size.height));
int boxSize = 20;//模糊度参数配置,可以根据需要修改
boxSize = boxSize - (boxSize % 2) + 1;
NSData *imageData = UIImageJPEGRepresentation(originImage, 1);
UIImage *tmpImage = [UIImageimageWithData:imageData];
CGImageRef img = tmpImage.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;
//create vImage_Buffer with data from CGImageRef
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);
//create vImage_Buffer for output
pixelBuffer = malloc(CGImageGetBytesPerRow(img) *CGImageGetHeight(img));
outBuffer.data = pixelBuffer;
outBuffer.width = CGImageGetWidth(img);
outBuffer.height = CGImageGetHeight(img);
outBuffer.rowBytes = CGImageGetBytesPerRow(img);
NSInteger windowR = boxSize/2;
CGFloat sig2 = windowR / 3.0;
if(windowR>0){ sig2 = -1/(2*sig2*sig2); }
int16_t *kernel = (int16_t*)malloc(boxSize*sizeof(int16_t));
int32_t sum = 0;
for(NSInteger i=0; i<boxSize; ++i){
kernel[i] = 255*exp(sig2*(i-windowR)*(i-windowR));
sum += kernel[i];
}
free(kernel);
// convolution
error = vImageConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0, kernel, boxSize,1, sum,NULL,kvImageEdgeExtend);
error = vImageConvolve_ARGB8888(&outBuffer, &inBuffer,NULL,0,0, kernel,1, boxSize, sum,NULL,kvImageEdgeExtend);
outBuffer = inBuffer;
if (error) {
//NSLog(@"error from convolution %ld", error);
}
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
kCGBitmapAlphaInfoMask &kCGImageAlphaNoneSkipLast);
CGImageRef imageRef =CGBitmapContextCreateImage(ctx);
UIImage *returnImage = [UIImageimageWithCGImage:imageRef];
//clean up
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
CFRelease(inBitmapData);
CGImageRelease(imageRef);
return returnImage;
}
- 高斯模糊 毛玻璃 可以调节模糊度
- 高斯模糊 毛玻璃效果
- iOS图片高斯模糊 毛玻璃效果
- android 实时高斯模糊 毛玻璃效果
- 自定义的毛玻璃效果,高斯模糊
- IOS_毛玻璃效果、图片高斯模糊
- Unity GrabPass 实现高斯模糊毛玻璃
- 高斯模糊实现毛玻璃效果
- 实现图片高斯模糊以及高斯模糊布局 (毛玻璃特效)
- iOS8中用UIVisualEffectView实现高斯模糊视图(毛玻璃效果)
- OpenCV——高斯模糊与毛玻璃特效
- HTML5 JS实现毛玻璃效果(高斯模糊)
- Android实现高斯模糊(也叫毛玻璃效果)
- IOS 高斯模糊 (毛玻璃效果 UIVisualEffect)
- Android毛玻璃效果 获取系统截屏 高斯模糊
- iOS开发探索-高斯模糊&毛玻璃效果
- iOS 视图高斯模糊(毛玻璃)效果实现
- Android图片毛玻璃背景效果,高斯模糊
- 51nod1495 中国好区间 思维
- 大数据(十二) - Oozie
- poj3126
- eclipse项目迁移到android studio【转载】
- 38. Count and Say leetcode python 2016 new season
- 高斯模糊 毛玻璃 可以调节模糊度
- 网络加密解密原理(一)
- Nginx安装部署
- 【常用工具类】KeyBoardUtils 软键盘相关辅助类
- 从零开始搭建架构实施Android项目
- Linux下比find快N倍的文件查找命令
- 连接远程服务器时SQL2008报错“请验证实例名称是否正确并且SQL Server已配置为允许远程连接”
- 生活随笔:让人烦躁不安的时期
- dede后台登陆又返回登陆界面怎么办