iOS 图片高斯效果

作者: 阿狸先森丶12138 | 来源:发表于2017-03-16 15:59 被阅读16次

    +(UIImage*)boxblurImage:(UIImage*)image withBlurNumber:(CGFloat)blur

    {

    if(blur <0.f|| blur >1.f) {

    blur =0.5f;

    }

    intboxSize = (int)(blur *40);

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

    CGImageRefimg = image.CGImage;

    vImage_BufferinBuffer, outBuffer;

    vImage_Errorerror;

    void*pixelBuffer;

    //从CGImage中获取数据

    CGDataProviderRefinProvider =CGImageGetDataProvider(img);

    CFDataRefinBitmapData =CGDataProviderCopyData(inProvider);

    //设置从CGImage获取对象的属性

    inBuffer.width=CGImageGetWidth(img);

    inBuffer.height=CGImageGetHeight(img);

    inBuffer.rowBytes=CGImageGetBytesPerRow(img);

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

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

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

    if(error) {

    NSLog(@"error from convolution %ld", error);

    }

    CGColorSpaceRefcolorSpace =CGColorSpaceCreateDeviceRGB();

    CGContextRefctx =CGBitmapContextCreate( outBuffer.data, outBuffer.width, outBuffer.height,8, outBuffer.rowBytes, colorSpace,kCGImageAlphaNoneSkipLast);

    CGImageRefimageRef =CGBitmapContextCreateImage(ctx);

    UIImage*returnImage = [UIImageimageWithCGImage:imageRef];

    //clean up CGContextRelease(ctx);

    CGColorSpaceRelease(colorSpace);

    free(pixelBuffer);

    CFRelease(inBitmapData);

    CGColorSpaceRelease(colorSpace);

    CGImageRelease(imageRef);

    returnreturnImage;

    }

    相关文章

      网友评论

        本文标题:iOS 图片高斯效果

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