2010-09-01 81 views
0

我正在尋找一種方法來在ActionScript 3中構建像繪圖工具一樣的photoshop。特別是我想要構建像photoshop中的筆刷。以便您可以使用不同的PNG作爲畫筆。AS3的Photoshop筆刷

我試着用Photoshop在Photoshop中保存畫筆作爲透明png,將其導入AS3項目並使用鼠標移動事件,每次將鼠標移動到bitmapdata對象時繪製png。 但這看起來不像photoshop。這裏有一個例子,第一Photoshop的圖紙,然後繪圖AS3:

alt text

alt text

在Photoshop中看起來很順利,但在AS3中你有醜陋的邊角和顏色的變化。 有誰知道解決方案?

THX,禮服

+2

我會在我的答案中添加一個代碼示例,但您似乎並不熱衷於接受答案,所以我將保存爲以後。 – grapefrukt 2010-09-01 12:28:32

+0

哦,我很愚蠢,我甚至無法實現你所取得的成就。你可以分享代碼嗎? – user151496 2014-04-25 14:07:06

+0

男人,這是4年前;)我會搜索該項目,並分享我的代碼;) – 23tux 2014-04-25 19:52:08

回答

0

更具體地說:每次觸發mouseDown時,您都應該創建一個臨時位圖。在這個刷子將被繪製成黑色和白色 - 這將產生更平滑的結果,例如,當您繪製的畫筆未充滿Alpha時。另外 - 在這裏,您將不得不使用葡萄酒所說的「步行」技術。

最後,一旦mouseUp事件被觸發,您必須重新着色位圖(對於筆刷顏色),如果需要,可能會添加一些過濾器並在主位圖上繪製它。

+0

thx爲您的答案,你是什麼意思畫黑色和白色? – 23tux 2010-09-01 16:41:28

+0

我的意思是 - 在PNG中有一個黑色圖像 - 像素的所有顏色都設置爲黑色,它們只在Alpha通道中不同。然後,您可以非常輕鬆地將這些圖像合併到臨時位圖,並在mouseUp和recolouring之後將它們合併到主位圖。 – 2010-09-01 19:42:38

2

這是因爲Photshop「走出去」鼠標座標之間的距離和油漆這一點。所以即使你在兩點之間快速移動你的鼠標,你也會得到一條連貫的線條。

您每鼠標更新只繪製一次,所以如果鼠標移動速度非常快,您將獲得點而不是線條。

您可以通過跟蹤最後一次鼠標更新的位置以及在額外步驟中的繪畫之間是否太遠來解決此問題。

+0

好吧,我會檢查這個併發布結果在這裏,thx爲您的答案 – 23tux 2010-09-01 16:48:20

3

答案是Flash使用預先倍增的alpha透明度繪製bitmapData。通過將幾乎透明的像素四捨五入到另一個值,Flash基本節省了內存。它是人眼無法察覺的,除非你一次又一次地將圖像堆疊在彼此之上。這會導致四捨五入的顏色錯誤,看起來幾乎像刷子的燒焦邊緣。

你一定需要像其他人一樣注意到在鼠標位置之間「走動」畫筆,但是這不會照顧當你將圖像堆疊在一起時發生的顏色偏移。

將畫筆描邊繪製到透明位圖中,並使用colorTransform方法將新圖層着色爲所選顏色。當您向上滑動時,將該透明圖層繪製到畫布上。 (不要忘了在不使用它的時候刪除額外的圖層!)