无论我做什么,我似乎都无法弄清楚为什么我的图像在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();
UIGraphicsBeginImageContext
:
...等效于
UIGraphicsBeginImageContextWithOptions
将不透明参数设置为NO
并将比例因子设置为1.0
。
但是,UIGraphicsBeginImageContextWithOptions
将其scale
参数定义为:
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)
否则,在相应的空间量中,您创建的上下文的像素将是屏幕的四分之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句