核心图形圆形图像模糊

时间:2014-01-14 08:02:05

标签: ios objective-c core-graphics

我正在使用核心图形绘制圆形图像,并修改了此SO answer

的实现

这是我的来源:

+ (UIImage*)circularImageWithRadius:(CGFloat)radius color:(UIColor*)color{
    CGRect rect = CGRectMake(0.0f, 0.0f, radius*2, radius*2);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillEllipseInRect(context, rect);
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

边缘模糊,我不确定为什么(我认为设备的分辨率无关紧要,开箱即用)。

我尝试用CGContextFillEllipseInRect(context, rect);替换CGContextFillRect(context, rect);,这也很模糊。然后我尝试CGContextFillRect(context, CGRectMake(0, 0, radius*4, radius*4),它完美,清晰的图像和一切(尽管是一个正方形,而不是一个圆圈)。所以我改回了CGContextDrawEllipseInRect(context, CGRectMake(0, 0, radius*4, radius*4),但这是我的结果:

enter image description here

而对于矩形,它与使用半径* 2时的大小相同,但图像更清晰。

如何修复模糊问题以及CGContextFillEllipseInRect为什么不填充预定义的图像rect?

2 个答案:

答案 0 :(得分:9)

在我发布之后立即发现这一点我感到愚蠢,但this answer指出了方向。

我刚刚添加了

if(UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
} else {
    UIGraphicsBeginImageContext(rect.size);
}

而不只是UIGraphicsBeginImageContext(rect.size);进入我的原始来源,而且它清晰而锐利。

答案 1 :(得分:0)

适用于Swift 3.0

        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
        defer { UIGraphicsEndImageContext() }
        if let context = UIGraphicsGetCurrentContext() {
            /// Do Stuff
        }