Actionscript 3 在Actionscript 3中将像素转换为Bezier曲线

Actionscript 3 在Actionscript 3中将像素转换为Bezier曲线,actionscript-3,flash-cs4,trace,bezier,pixels,Actionscript 3,Flash Cs4,Trace,Bezier,Pixels,好的,我会尽量描述一下 我正在为一个客户开发一个项目,该项目要求上传图像具有jibjab风格的掩蔽功能 我希望能够生成一个数据库可存储对象,其中包含贝塞尔形状的锚定/控制位置,以便稍后将其拉出并重新遮罩该对象。这一切都很容易做到,除了一个问题:我需要从用户绘制的轮廓创建贝塞尔对象 到目前为止,我对整个过程的设想如下: 鼠标按下时,创建一个新精灵,Beginull,并移动到鼠标位置 鼠标移动时,将线条移动到XY坐标 鼠标向上时,结束填充 这一切都很好。我可以把信息存储在这里,但是我会看到一个巨大的

好的,我会尽量描述一下

我正在为一个客户开发一个项目,该项目要求上传图像具有jibjab风格的掩蔽功能

我希望能够生成一个数据库可存储对象,其中包含贝塞尔形状的锚定/控制位置,以便稍后将其拉出并重新遮罩该对象。这一切都很容易做到,除了一个问题:我需要从用户绘制的轮廓创建贝塞尔对象

到目前为止,我对整个过程的设想如下:

鼠标按下时,创建一个新精灵,Beginull,并移动到鼠标位置

鼠标移动时,将线条移动到XY坐标

鼠标向上时,结束填充

这一切都很好。我可以把信息存储在这里,但是我会看到一个巨大的物体,里面有大量无用的x/y坐标,除了在每个像素上加上控制柄之外,没有办法进行微调。(我也可以给最终用户一个铅笔工具…)

就贝塞尔曲线计算而言,我的想法如下:

1:确定何时需要开始新曲线,并在此间隔上跟踪像素的xy。我想象这只是一个像素计数,也许只是在每次鼠标移动时增加一个计数变量,然后每x像素增加一个新的计数变量。这里的问题是有些曲线不准确,有些曲线不必要,但我真的需要一个大致的面积,而不是一个精确的表示,所以它可以工作。不过我会更喜欢一些更聪明的东西

2:获取每个新的x/y,将其存储为一个锚点,并计算出控件将在何处生成此锚点和最后一个锚点之间的直线曲线。这就是我真正挂断电话的地方。我肯定有人在flash中完成了这项工作,但谷歌搜索似乎无法帮助我完成这项工作。我已经画了很多素描,也做了一些数学运算,但似乎无法找到一种将像素转换成贝塞尔曲线的方法

这可能吗?我真正需要的是一个能接近相同形状的东西。我在想,也许只有当下一个像素的角度相对于当前线条或其他东西超过180度时,才放置锚,然后抓住这些变化之间的弧线边缘,但无论我怎么努力,我似乎都不知道如何让它工作

谢谢你的帮助,我一定会在这里发布我的进展,我认为这在很多应用中都非常有用,只要它确实可行


Jesse

将像素转换为贝塞尔曲线听起来需要做很多工作。你可以尝试使用线性最小二乘算法

换一种方式,你能让你的用户画矢量图形吗?这样,您就可以将形状存储在数据库中

将光栅转换为矢量的另一种很酷的方法类似于此迭代程序:


祝你好运

在我的回答中,我讨论了如何使用将位图转换为Bezier。我建议通过服务器上的此程序传递用户图形。Autotrace在追踪和简化方面做得非常出色,因此无需在这里尝试重新发明轮子。

感谢您的回答,虽然我想我可能应该更具体地介绍一下应用程序,但我实际上只需要一个遮罩的轮廓,因此将图像转换为矢量或多边形,尽管这很酷,并不能解决我的问题。线性最小二乘算法非常酷,我想这可能更接近我想要的

我现在有一个基本的解决方法,我只是计算鼠标的移动,然后每移动一次X(用它来获得最理想的曲线),我就抓住xy的位置。然后,我每隔存储一个xy,将其转换为锚点,剩余的xy将转换为控件。这会产生一些令人满意的结果,但也有一些小问题,因为绘制遮罩的速度会影响控制柄的数量,它实际上只是获得一个大致的区域,而不是精确的拟合。 有趣的是,用户绘制更精确形状的速度似乎较慢,所以这个解决方案比我想象的要好得多,但它并没有想象的那么好。这对客户来说是可行的,所以虽然没有理由进一步研究,但我喜欢学习新的东西,并且会花一些非工作时间研究线性最小二乘方程,看看我是否能召集一个班来为我做这些计算。如果有人遇到这种类型的AS3代码,或者想要我的代码,请告诉我,这是一个有趣的难题