Archive for April 10th, 2009

Snippet: Rounded Images

And today, an answer to the classic question

Anybody know how make image and first cell in grouped table be rounded? Like iTunes album image. 

which is:

 

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

 

 Now you know!

Continue Reading →
1