【发布时间】:2011-11-15 23:50:57
【问题描述】:
我一直在尝试将 UIImage 遮盖成一个圆圈。 我现在在这里使用在其他答案中很流行的代码,但是虽然我确实得到了一个圆圈,但它的边缘非常锯齿并且不平滑。 任何人都可以帮忙吗?我能得到一个完美、光滑的圆圈吗?
我用来创建掩码的代码是:
(UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef imageNoAlpha = image.CGImage;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGFloat width = CGImageGetWidth(imageNoAlpha);
CGFloat height = CGImageGetWidth(imageNoAlpha);
CGContextRef ctxWithAlpha = CGBitmapContextCreate(nil, width, height, 8, 4*width, cs, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(ctxWithAlpha, CGRectMake(0, 0, width, height), imageNoAlpha);
CGImageRef imageWithAlpha = CGBitmapContextCreateImage(ctxWithAlpha);
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
UIImage* retImage= [UIImage imageWithCGImage:masked];
UIImage* retImageFixed = [retImage transparentBorderImage:1];
CGImageRelease(mask);
CGImageRelease(masked);
CGImageRelease(imageWithAlpha);
CGContextRelease(ctxWithAlpha);
CGColorSpaceRelease(cs);
return retImageFixed;
提前谢谢...
【问题讨论】:
-
可能是。这两个链接可能对您正在寻找的内容有所帮助。 1.stackoverflow.com/questions/4414221/uiimage-in-a-circle 2.stackoverflow.com/questions/1878595/…
-
谢谢。我见过很多人说你可以只使用角半径属性,但这是错误的。虽然它确实使角落变圆,但它永远不会使整个图像看起来像一个圆圈。
标签: iphone objective-c xcode uiimageview uiimage