[转]给UIImage添加圆角(圆角矩形),也可用于CCSprite

给UIImage添加圆角,也可用于CCSprite

//给图片添加圆角显示
- (UIImage *) roundCorners: (UIImage*) img
{
   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, 10, 10);
   CGContextClosePath(context);
   CGContextClip(context);
   
   CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
   
   CGImageRef imageMasked = CGBitmapContextCreateImage(context);
   CGContextRelease(context);
   CGColorSpaceRelease(colorSpace);
   [img release];
   
   return [UIImage imageWithCGImage:imageMasked];
}
 
//这是被调用的静态方法
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);
}

经测验,可以正常使用。
原文地址:https://www.cnblogs.com/ygm900/p/3085480.html