iOS-UIImage切圆角方法(UIImage make round corner image)

来源:互联网 发布:返利网站哪个最好 知乎 编辑:程序博客网 时间:2024/06/03 19:30
iOS-UIImage切圆角方法(UIImage make round corner image)  

 |字号 订阅

代码如下:

(注:要导入相应的.framework)


static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight)

{

    float fw, fh;

    if (ovalWidth == 0 || ovalHeight == 0) {

        CGContextAddRect(context, rect);

        return;

    }

    CGContextSaveGState(context);

    CGContextTranslateCTM (context, CGRectGetMinX(rect), CGRectGetMinY(rect));

    CGContextScaleCTM (context, ovalWidth, ovalHeight);

    fw = CGRectGetWidth (rect) / ovalWidth;

    fh = CGRectGetHeight (rect) / ovalHeight;

    CGContextMoveToPoint(context, fw, fh/2);

    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);

    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);

    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);

    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);

    CGContextClosePath(context);

    CGContextRestoreGState(context);

}


+ (UIImage*)makeRoundCornerImage:(UIImage*)img :(int)cornerWidth :(int)cornerHeight {

    

UIImage * newImage = nil;

if( nil != img)

{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int w = img.size.width;

int h = img.size.height;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace,kCGImageAlphaPremultipliedFirst);

CGContextBeginPath(context);

CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);

addRoundedRectToPath(context, rect, cornerWidth, cornerHeight);

CGContextClosePath(context);

CGContextClip(context);

CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);

CGImageRef imageMasked = CGBitmapContextCreateImage(context);

CGContextRelease(context);

CGColorSpaceRelease(colorSpace);

newImage = [[UIImage imageWithCGImage:imageMasked] retain];

// 上面如果不retain ,会被释放掉!!

CGImageRelease(imageMasked);

[pool release];

}

    return [newImage autorelease];

}


(此段非本人原创)

原创粉丝点击