【问题标题】:UIImage's drawInrect: smoothes imageUIImage 的 drawInrect:平滑图像
【发布时间】:2012-09-07 18:58:46
【问题描述】:

我正在尝试使用UIImagedrawInRect: 方法绘制图像。代码如下:

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"];

UIGraphicsBeginImageContext(image.size);

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

问题是生成的图像模糊。这是与源图像(左侧)相比的结果图像(右侧):

CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO) 都试过了,但都没有解决问题。

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: ios uikit uiimage antialiasing


    【解决方案1】:

    如果您在 Retina 设备上进行开发,问题可能与您的图形上下文的分辨率有关。你会尝试:

    UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f);
    

    这将启用视网膜分辨率。此外,您的图像应该以@2x 分辨率提供才能正常工作。

    如果你也想支持非视网膜设备,你可以使用:

    if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f);
    } else {
        UIGraphicsBeginImageContext(newSize);
    }
    

    【讨论】:

    • 我不建议使用 == 检查浮点相等性。您所要做的就是将比例设置为0.f,其余的由框架来处理。 (见stackoverflow.com/questions/2765537/…
    • 非常感谢!这解决了这个问题。 if ([UIScreen instancesRespondToSelector:@selector(scale)]) -- 这条线支持 iOS3 吗?从 iOS 4.0 开始支持scale 属性。
    • @Mazyod 我是否正确理解0.0f 将使框架处理正确的比例,无论当前设备上是视网膜还是非视网膜?
    • @Timo 是的!再次,查看我链接的帖子以获取更多信息。
    • 我建议使用[UIScreen mainScreen].scale 而不是硬编码的@2x,因为iPhone 6+ 的比例是3x。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多