我的绘图代码如何保持模糊形状?

无论我做什么,我似乎都无法弄清楚为什么我的图像在iOS显示屏上显得模糊不清。 无论是我在图像编辑器还是绘图代码中创build的都不重要,但是我认为代码会使问题更容易parsing。 我知道,如果行是1像素宽,它会显得模糊,但我尝试了多个线宽的大小和类似的结果。 我能做些什么来确保我的graphics看起来很锐利?

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(); 

在这里输入图像说明

UIGraphicsBeginImageContext

…相当于调用UIGraphicsBeginImageContextWithOptions函数,将opaque参数设置为NO ,比例因子为1.0

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

规模
适用于位图的比例因子。 如果您指定的值为0.0 ,则缩放系数将设置为设备主屏幕的缩放系数。

因此,您使用UIGraphicsBeginImageContextWithOptions正在创build一个1.0级别的上下文。 这对于去年的iPad Mini来说是正确的,但所有视网膜级设备都具有2.0的“原生”尺度 – 每逻辑点两个像素。 UIGraphicsBeginImageContextWithOptions引入了0.0的特殊情况,以便您不必为自己处理为该设备获取正确的编号(虽然[[UIScreen mainScreen] scale]将是一个简单的方法)。

因此,将您正在退出的调用切换到UIGraphicsBeginImageContext(CGSizeMake(1000, 1000))为:

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

否则,您创build的上下文将有相当于屏幕在相应的空间量中的四分之一像素。