iOS 日常开发随笔iOS Developer

iOS 图片高斯效果

2017-03-16  本文已影响16人  阿狸先森丶12138

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

}

上一篇 下一篇

猜你喜欢

热点阅读