如何添加accelerate.framework

如题所述

 1.首先导入系统库 Accelerate.framework

  2.其次在要实现毛玻璃效果的页面添加头文件 #import

  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];

  大功告成,(*^__^*) ……小伙伴们快去试试效果吧~
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答