Skip to content

Instantly share code, notes, and snippets.

@kishikawakatsumi
Created July 18, 2009 17:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kishikawakatsumi/149621 to your computer and use it in GitHub Desktop.
Save kishikawakatsumi/149621 to your computer and use it in GitHub Desktop.
static void addRoundedRectToPath(CGContextRef context,
CGRect rect,
float ovalWidth,
float ovalHeight,
int i
{
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
#pragma mark change the corner size below...
if (1 == i) {
CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 0); // Top right corner
CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 0); // Top left corner
CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner
CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 0); // Back to lower right
} else {
CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 0); // Top right corner
CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner
CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 0); // Lower left corner
CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 0); // Back to lower right
}
CGContextClosePath(context);
CGContextRestoreGState(context);
}
+ (id)createSingleRoundedCornerImage:(UIImage*)image size:(CGSize)size {
// the size of CGContextRef
int w = size.width;
int h = size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGRect rect = CGRectMake(0, 0, w, h);
CGContextBeginPath(context);
addRoundedRectToPath(context, rect, 10, 10, 0);
CGContextClosePath(context);
CGContextClip(context);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), image.CGImage);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
image = [UIImage imageWithCGImage:imageMasked];
CGImageRelease(imageMasked);
return image;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment