Created
July 23, 2014 06:08
-
-
Save looping/f59a097d8820f1285160 to your computer and use it in GitHub Desktop.
+ (UIImage *)createRoundedRectImage:(UIImage*)image radius:(NSInteger)r;
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); // Start at lower right corner | |
CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1); // Top right corner | |
CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner | |
CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner | |
CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // Back to lower right | |
CGContextClosePath(context); | |
CGContextRestoreGState(context); | |
} | |
+ (UIImage *)createRoundedRectImage:(UIImage*)image radius:(NSInteger)r { | |
int w = CGImageGetWidth(image.CGImage); | |
int h = CGImageGetHeight(image.CGImage); | |
int pc = CGImageGetBitsPerComponent(image.CGImage); | |
int pr = CGImageGetBytesPerRow(image.CGImage); | |
CGColorSpaceRef s = CGImageGetColorSpace(image.CGImage); | |
CGBitmapInfo i =CGImageGetBitmapInfo(image.CGImage); | |
UIImage *img = image; | |
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
CGContextRef context = CGBitmapContextCreate(NULL, w, h, pc, pr, s, i); | |
CGRect rect = CGRectMake(0, 0, w, h); | |
CGContextBeginPath(context); | |
addRoundedRectToPath(context, rect, r, r); | |
CGContextClosePath(context); | |
CGContextClip(context); | |
CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage); | |
CGImageRef imageMasked = CGBitmapContextCreateImage(context); | |
img = [UIImage imageWithCGImage:imageMasked]; | |
CGContextRelease(context); | |
CGColorSpaceRelease(colorSpace); | |
CGImageRelease(imageMasked); | |
return img; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment