美文网首页
iOS 图片加磨砂蒙层

iOS 图片加磨砂蒙层

作者: 神一样的队友 | 来源:发表于2023-05-24 10:30 被阅读0次

引入文件

#import <Accelerate/Accelerate.h>

#import <float.h>

//磨砂效果

- (UIImage *)blurryImageWithBlurLevel:(CGFloat)blur{

    intboxSize = (int)(blur *40);

    boxSize = boxSize - (boxSize %2) +1;

    CGImageRefimg =self.CGImage;

    vImage_BufferinBuffer, outBuffer;

    vImage_Error error;

    void*pixelBuffer;

    //create vImage_Buffer with data from CGImageRef

    CGDataProviderRefinProvider =CGImageGetDataProvider(img);

    CFDataRefinBitmapData =CGDataProviderCopyData(inProvider);

    inBuffer.width=CGImageGetWidth(img);

    inBuffer.height=CGImageGetHeight(img);

    inBuffer.rowBytes = CGImageGetBytesPerRow(img);

    inBuffer.data= (void*)CFDataGetBytePtr(inBitmapData);

    //create vImage_Buffer for output

    pixelBuffer =malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));

    if(pixelBuffer ==NULL)

        NSLog(@"No pixelbuffer");

    outBuffer.data= pixelBuffer;

    outBuffer.width=CGImageGetWidth(img);

    outBuffer.height=CGImageGetHeight(img);

    outBuffer.rowBytes = CGImageGetBytesPerRow(img);

    //perform convolution

    error =vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0, boxSize, boxSize,NULL,kvImageEdgeExtend)

    ?:vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer,NULL,0,0, boxSize, boxSize,NULL,kvImageEdgeExtend)

    ?: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,

                                             (CGBitmapInfo)kCGImageAlphaNoneSkipLast);

    CGImageRef imageRef = CGBitmapContextCreateImage (ctx);

    UIImage*returnImage = [UIImageimageWithCGImage:imageRef];

    //clean up

    CGContextRelease(ctx);

    CGColorSpaceRelease(colorSpace);

    free(pixelBuffer);

    //free(pixelBuffer2);

    CFRelease(inBitmapData);

    CGImageRelease(imageRef);

    returnreturnImage;

}

相关文章

网友评论

      本文标题:iOS 图片加磨砂蒙层

      本文链接:https://www.haomeiwen.com/subject/zfbfedtx.html