• 毛玻璃(模糊效果)


    //将某个 view 转换成图片

    #pragma mark - shot

    - (UIImage *)imageFromView:(UIView *)theView

    {

        UIGraphicsBeginImageContext(theView.frame.size);

        CGContextRef context = UIGraphicsGetCurrentContext();

        [theView.layer renderInContext:context];

        UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return theImage;

    }

     //模糊效果(将图片模糊化)

    - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {

        if ((blur < 0.0f) || (blur > 1.0f)) {

            blur = 0.5f;

        }

        

        int boxSize = (int)(blur * 100);

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

        

        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,

                                                 CGImageGetBitmapInfo(image.CGImage));

        

        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;

    }

  • 相关阅读:
    python路径拼接os.path.join()函数的用法
    selenium常用定位方式
    谷歌浏览器发生个人资料错误
    【回顾】html属性、标题、段落、文本格式化
    【回顾】html简介、基础、元素
    类的定义与使用
    简单的超市库存管理系统
    方法定义练习
    参数传递
    方法的重载
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6400361.html
Copyright © 2020-2023  润新知