核心图像:圆形图片模糊化

3
我正在使用Core Graphics绘制一个圆形图像,使用的是SO答案的修改版实现。
以下是我的源代码:
+ (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

相比之下,当使用矩形时,尺寸与使用radius*2时相同,但图像更加清晰。
我应该如何解决我的模糊问题?为什么 CGContextFillEllipseInRect 没有填充预定义的图像矩形?
2个回答

9
我刚发布完这篇文章就发现这个答案了,感觉很傻。但是这个回答指明了方向。
我只是添加了:
if(UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
} else {
    UIGraphicsBeginImageContext(rect.size);
}

我原本的代码只有UIGraphicsBeginImageContext(rect.size);,但现在我想让它更加清晰明了。


我也遇到了这个问题。解决方法是将比例设置为0.0,这样可以将图像绘制到设备的比例上。原始的UIGraphicsBeginImageContext默认将不透明度设置为NO,比例设置为1.0。我指出这一点是因为我最初认为解决方法与将不透明度设置为NO有关。 - Gandalf458

0

针对Swift 3.0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接