- (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;
}