ios – 使用CoreGraphics绘制视网膜显示 – 图像像素化

前端之家收集整理的这篇文章主要介绍了ios – 使用CoreGraphics绘制视网膜显示 – 图像像素化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的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,而无需任何额外的检查.

猜你在找的iOS相关文章