2009-06-19 77 views
1

好的,所以我會盡量保持描述性。在Actionscript 3中將像素轉換爲貝塞爾曲線

我正在爲需要上傳圖像的jibjab樣式遮罩功能的客戶端項目工作。

我想能夠生成一個數據庫可存儲對象,其中包含一個貝塞爾形狀的錨/控件位置,所以我可以稍後將其拉出並重新屏蔽該對象。這一切都很容易做到,除了一個問題:我需要從用戶繪製的輪廓中創建貝塞爾對象。

到目前爲止,這裏就是我想象中的要處理:

上按下鼠標,創建一個新的精靈,的beginFill和的moveTo鼠標位置。

在鼠標移動時,lineTo一個XY座標。

在鼠標上,endFill。

這一切都很好。我可以在這裏存儲信息,但是我會看到一個GIGANTIC對象,裏面充滿了大量無用的x/y座標,沒有辦法在每個像素上放置句柄之外進行微調。 (我不妨給最終用戶鉛筆工具...)

這裏就是我儘量想爲貝塞爾曲線的計算雲:

1:圖時,我需要開始一個新的曲線,並在此間隔上跟蹤像素的xy。我想象這只是一個像素數量,也許只是每增加一個鼠標移動一個計數變量,並每x像素一個新的。這裏的問題是一些曲線不準確,其他曲線不必要,但我真的只需要一個普通的區域,而不是一個確切的表示,所以它可以工作。儘管如此,我會更開心一點。

2:取每個新的x/y,將它作爲錨點,並找出控制線將在哪裏與最後一個錨點之間建立曲線。這是我真正掛斷的地方。我敢肯定有人已經在Flash中做到了這一點,但沒有任何數量的谷歌搜索似乎可以幫助我完成這一任務。我已經做了很多素描和什麼小算術,我可以把我的大腦包裹起來,但似乎無法找出將像素轉換爲貝塞爾曲線的方法。

這可能嗎?我真正需要的是接近相同形狀的東西。我考慮的可能只是當下一個像素相對於當前線或某物超過180度的角度放置錨時,只是在這些變化之間抓住弧的邊緣,但無論我嘗試多麼努力,似乎無法弄清楚如何讓這個工作!

感謝您的幫助,我一定會在這裏發佈我的進步,我走了,我認爲這可能是在許多應用中非常有用,只要它實際上是可行的......

傑西

回答

0

感謝您的回答,雖然我想我應該對應用程序更具體一些,但我真的只需要一個遮罩輪廓,因此將圖像轉換爲矢量或多邊形,儘管它非常酷,真的解決了我的問題。線性最小二乘算法非常酷,我認爲這可能更接近我所尋找的。

我現在有一個基本的解決方法,我只是計算鼠標移動,然後每一個X(玩它得到最理想的曲線)移動,我抓住xy位置。然後,我把所有其他的xy存儲起來,然後把它變成一個錨點,剩下的xys就變成了控件。這產生了一些令人滿意的結果,但有一些小問題,因爲繪製蒙版的速度會影響手柄的數量,而且它實際上只是獲得一個普通區域,而不是一個精確的合適區域。有趣的是,用戶似乎對更精確的形狀繪製速度較慢,所以這種解決方案比我想象的要好得多,但效果並不盡如人意。這對客戶很有用,所以雖然沒有理由繼續追求,但我喜歡學習新東西,並且會花一些時間研究線性最小方程,看看我是否可以組裝一個能夠完成這些計算的課程爲了我。如果有人爲這種類型的東西運行某些AS3代碼,或者想要我的一些代碼,請告訴我,這是一個有趣的難題。

1

在我的回答對我this question討論使用autotrace位圖轉換爲貝濟耶。我建議您通過服務器上的此程序傳遞用戶繪圖。 Autotrace在追蹤和簡化方面做得非常出色,所以沒有必要嘗試在這裏重新發明輪子。