2011-08-06 75 views
9

在我的iOS应用程序中,我尝试使用CoreGraphics绘制曲线。绘图本身工作正常,但在视网膜显示器上,图像使用相同的分辨率绘制,并且不会像素加倍。结果是一个像素化的图像。使用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, 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,但至今没有这些帮助。 (虽然我可能使用不当。)

任何帮助将不胜感激。

回答

27

您需要

if (UIGraphicsBeginImageContextWithOptions != NULL) { 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 
} else { 
    UIGraphicsBeginImageContext(size); 
} 

UIGraphicsBeginImageContextWithOptions在4.x版的软件推出,取代UIGraphicsBeginImageContext。如果你打算在3.x设备上运行这个代码,你需要弱化链接UIKit框架。如果您的部署目标是4.x或更高版本,则只需使用UIGraphicsBeginImageContextWithOptions即可,无需任何额外的检查。

+0

它完美的作品!谢谢! – antalkerekes