在我的iOS应用程序中,我试图用CoreGraphics绘制曲线.绘图本身工作正常,但在视网膜显示器上,图像使用相同的分辨率绘制,不会使像素倍增.结果是像素化图像.
我正在绘制使用以下功能:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self.canvasView]; UIGraphicsBeginImageContext(self.canvasView.frame.size); [canvasView.image drawInRect:self.canvasView.frame]; CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetShouldAntialias(ctx,YES); CGContextSetLineCap(ctx,kCGLineCapRound); CGContextSetLineWidth(ctx,5.0); CGContextSetRGBStrokeColor(ctx,1.0,0.0,1.0); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx,lastPoint.x,lastPoint.y); CGContextAddLineToPoint(ctx,currentPoint.x,currentPoint.y); CGContextStrokePath(ctx); canvasView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lastPoint = currentPoint; // some code omitted from this example }
我发现的建议是use the scaleFactor
property,或CGContextSetShouldAntialias()
function,但这两个都没有帮助到目前为止. (虽然我可能不正确地使用它们)
任何帮助将不胜感激.
解决方法
您需要用UIGraphicsBeginImageContext替换
if (UIGraphicsBeginImageContextWithOptions != NULL) { UIGraphicsBeginImageContextWithOptions(size,NO,0.0); } else { UIGraphicsBeginImageContext(size); }
UIGraphicsBeginImageContextWithOptions是在4.x软件中引入的.如果要在3.x设备上运行此代码,则需要使用弱链接UIKit框架.如果您的部署目标是4.x或更高版本,您可以使用UIGraphicsBeginImageContextWithOptions,而无需任何额外的检查.