zoukankan      html  css  js  c++  java
  • IOS UIImage 模糊

    #import <UIKit/UIKit.h>
    #import <Accelerate/Accelerate.h>
    #import <QuartzCore/QuartzCore.h>
    
    @interface UIImage (Blur)
    
    // 0.0 to 1.0
    - (UIImage*)blurredImage:(CGFloat)blurAmount;
    
    @end
    
    #import "UIImage+Blur.h"
    
    @implementation UIImage (Blur)
    
    - (UIImage*)blurredImage:(CGFloat)blurAmount
    {
        if (blurAmount < 0.0 || blurAmount > 1.0) {
            blurAmount = 0.5;
        }
        
        int boxSize = (int)(blurAmount * 40);
        boxSize = boxSize - (boxSize % 2) + 1;
        
        CGImageRef img = self.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) {
            error = vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
    
            if (!error) {
                error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
            }
        }
        
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        
        CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
                                                 outBuffer.width,
                                                 outBuffer.height,
                                                 8,
                                                 outBuffer.rowBytes,
                                                 colorSpace,
                                                 (CGBitmapInfo)kCGImageAlphaNoneSkipLast);
        
        CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
        
        UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
        
        CGContextRelease(ctx);
        CGColorSpaceRelease(colorSpace);
        
        free(pixelBuffer);
        CFRelease(inBitmapData);
        
        CGColorSpaceRelease(colorSpace);
        CGImageRelease(imageRef);
        
        return returnImage;
    }
    
    @end

    // 使用

      UIImage *image = [[UIImage imageNamed:@"xxxx.png"] blurredImage:0.6];

     
  • 相关阅读:
    网络流 KM dinic
    网络流 增广路 回退
    树链剖分
    线段树区间更新 lazy
    全排列
    各种蕴含算法思想的DP
    各种蕴含算法思想的DP
    Strassen矩阵乘法之思考
    [0,x)的随机数
    hdu1331 按着题目的公式直接写
  • 原文地址:https://www.cnblogs.com/joesen/p/4074165.html
Copyright © 2011-2022 走看看