好的,所以我会尽量做到描述性。
我正在为需要上传图像的 jibjab 样式遮罩功能的客户开发一个项目。
我希望能够生成一个包含贝塞尔形状的锚点/控制位置的数据库可存储对象,因此我可以稍后将其拉出并重新屏蔽该对象。这一切都很容易做到,除了一个问题:我需要从用户绘制的轮廓创建贝塞尔对象。
到目前为止,这是我想象的过程:
在鼠标按下时,创建一个新的精灵、beginFill 和 moveTo 鼠标位置。
在鼠标移动时,lineTo 是一个 XY 坐标。
在鼠标上,endFill。
这一切都很好。我可以在这里存储信息,但我会看到一个巨大的对象,里面装满了大量非常无用的 x/y 坐标,除了在每个像素上放置句柄之外,没有办法真正进行微调更改。(我不妨给最终用户一个铅笔工具......)
就贝塞尔曲线计算而言,这就是我的想法:
1:弄清楚何时需要开始一条新曲线,并在此间隔上跟踪像素的 xy。我想象这只是一个像素数,也许只是在每次鼠标移动时增加一个计数变量,然后每 x 个像素创建一个新变量。这里的问题是一些曲线不准确,而另一些则不必要,但我真的只需要一个一般区域,而不是一个精确的表示,所以它可以工作。不过,我会更高兴一些更聪明的东西。
2:获取每个新的 x/y,将其存储为锚点,并计算出控件将在何处生成此锚点和最后一个锚点之间的直线曲线。这是我真正挂断电话的地方。我敢肯定有人已经在 Flash 中完成了这项工作,但似乎再多的谷歌搜索也无法帮助我找到完成这项工作的方法。我已经画了很多草图,还有什么小数学可以让我的大脑环绕,但似乎无法找到将像素转换为贝塞尔曲线的方法。
这可能吗?我真正需要的是接近相同形状的东西。我正在考虑可能只在下一个像素的角度相对于当前线或其他东西的角度超过 180 度时才放置锚点,并且只是抓住这些变化之间的弧线边缘,但无论我多么努力,我似乎无法弄清楚如何让它工作!
感谢您的帮助,我一定会在这里发布我的进展,我认为这在许多应用程序中都非常有用,只要它实际上是可行的......
杰西