为什么我的绘图代码会导致模糊的形状?

时间:2014-08-08 19:08:21

标签: ios graphics uikit

无论我做什么,我似乎无法弄清楚为什么我的图像在iOS显示屏上模糊不清。 它是否是我在图像编辑器或绘图代码中创建的并不重要,但我认为代码会使问题更容易解析。我知道如果这条线是1像素宽,它会显得模糊,但我尝试了多个线宽尺寸,结果相似。我该怎么做才能确保我的图形看起来很清晰?

UIGraphicsBeginImageContext(CGSizeMake(1000, 1000));
    UIBezierPath *bezier = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 1000, 1000)];
    [[UIColor greenColor]set];
    [bezier fill];
    [[UIColor blackColor]set];
    bezier = [UIBezierPath bezierPath];
    [bezier setLineWidth:1.5]; //I tried .5, 1, 1.5, & 2 with similar results
    [bezier moveToPoint:CGPointMake(450, 500)];
    [bezier addLineToPoint:CGPointMake(500, 400)];
    [bezier addLineToPoint:CGPointMake(550, 500)];
    [bezier closePath];
    [bezier stroke];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

enter image description here

1 个答案:

答案 0 :(得分:0)

UIGraphicsBeginImageContext

  

...等同于调用   UIGraphicsBeginImageContextWithOptions函数与不透明   参数设置为NO,比例因子为1.0

但是,UIGraphicsBeginImageContextWithOptions将其scale参数定义为:

  

比例
  要应用于位图的比例因子。如果指定值0.0,则比例因子将设置为设备主屏幕的比例因子。

因此,您使用UIGraphicsBeginImageContextWithOptions正在创建一个缩放为1.0的上下文。对于例如,这是正确的去年的iPad Mini,但所有视网膜级设备都有一个原生的'比例2.0 - 每个逻辑点两个像素。 UIGraphicsBeginImageContextWithOptions介绍了0.0的特殊情况,以便您不必为处理为自己获取该设备的正确数字而烦恼(尽管[[UIScreen mainScreen] scale]将是一种简单的方法)。

因此,将您的退出电话转至UIGraphicsBeginImageContext(CGSizeMake(1000, 1000))

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1000, 1000), NO, 0.0)

否则,您创建的上下文的像素数将是屏幕在相应空间量内的四分之一。