9

可能重复:
iPhone 平滑草图绘制算法

我想开发一个支持素描的 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();

看:

曲线不平滑

曲线不够平滑。

我尝试过使用 sourceforge.net/projects/curve/files/ 中的一些代码的 Catmull-Rom Spline 方法

看:

平滑曲线

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

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

  2. 该算法对角的校正过多,因此用户无法绘制具有尖角的星星。

我非常希望为 Autodesk 的“Sketch Book”应用程序等用户提供一个非常好的绘图环境。(见下图)

看:

非常光滑

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

我怎样才能在 iPhone 上做到这一点?我可以使用哪种算法来获得像“Sketch Book”这样的高质量?有什么代码供我参考吗?

谢谢!!

4

0 回答 0