如何在iPhone上绘制平滑的草图

时间:2011-04-22 07:19:54

标签: iphone drawing curvesmoothing

  

可能重复:
  iPhone smooth sketch drawing algorithm

我想开发一款支持草图绘制的iPhone应用程序。

我在touchesMoved:

中使用了这样的代码
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 1.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), points.pointB.x, points.pointB.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), points.pointA.x, points.pointA.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

请参阅:

curves not smooth

曲线不够平滑。

我尝试过使用catforge.net / project /curve

请参阅:

smooth curves

这次曲线更平滑,但有两个问题:

  1. Catmull-Rom Spline使用许多三次贝塞尔曲线段和二次贝塞尔曲线段来形成曲线。当触摸结束时,不能确定二次贝塞尔曲线段。在用户将手指从屏幕上移开之前,我无法绘制二次线段。我只能在用户绘图时绘制立方体段,这样他会感到有些延迟。当手指快速移动时,曲线滞后于手指。

  2. 该算法过多地修正了角落,因此用户无法绘制具有尖角的星形。

  3. 我非常希望为用户提供非常好的绘图环境,例如Autodesk的“Sketch Book”应用程序。 (见下图)

    请参阅:

    very smooth

    该应用程序提供平滑的曲线,它还允许我绘制一个尖角的星。

    我怎么能在iPhone上这样做? 我可以使用哪种算法来实现“Sketch Book”这样的高质量? 我参考的任何代码?

    谢谢!

0 个答案:

没有答案