阅读背景:

iOS带透明度图片的虚化

来源:互联网 


- (UIImage *)gaussBlurWithLevel:(CGFloat)blurLevel
{
    if (blurLevel < 0.f || blurLevel > 1.f) {
        blurLevel = 0.5f;
    }
    int boxSize = (int)(blurLevel * 50);
    boxSize = boxSize - (boxSize % 2) + 1;
    
    CGRect imageRect = { CGPointZero, self.size };
    UIImage *effectImage = self;

    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
    CGContextRef effectInContext = UIGraphicsGetCurrentContext();
    [self drawInRect:imageRect];
    vImage_Buffer effectInBuffer;
    effectInBuffer.data     = CGBitmapContextGetData(effectInContext);
    effectInBuffer.width    = CGBitmapContextGetWidth(effectInContext);
    effectInBuffer.height   = CGBitmapContextGetHeight(effectInContext);
    effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext);
    
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
    CGContextRef effectOutContext = UIGraphicsGetCurrentContext();

    vImage_Buffer effectOutBuffer;
    effectOutBuffer.data     = CGBitmapContextGetData(effectOutContext);
    effectOutBuffer.width    = CGBitmapContextGetWidth(effectOutContext);
    effectOutBuffer.height   = CGBitmapContextGetHeight(effectOutContext);
    effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext);
    
    vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, boxSize, boxSize, 0, kvImageEdgeExtend);
    vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, boxSize, boxSize, 0, kvImageEdgeExtend);
    vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, boxSize, boxSize, 0, kvImageEdgeExtend);

    effectImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIGraphicsEndImageContext();
    
    return effectImage;
}- (UIImage *)gaussBlurWithLevel:(CGFloat)



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: