0

私はActionScript3で描画ツールのようなフォトショップを構築する方法を探しています。特にフォトショップのブラシのようなものを構築したいと思います。さまざまなPNGをブラシとして使用できるようにします。

Photoshopでブラシを透明なpngとして保存し、AS3プロジェクトにインポートし、マウス移動イベントを使用して、マウスをビットマップデータオブジェクトに移動するたびにpngを描画してみました。しかし、それはフォトショップのようには見えません。次に例を示します。最初にフォトショップの描画、次にas3の描画です。

代替テキスト

代替テキスト

フォトショップでは非常に滑らかに見えますが、as3ではその醜いコーナーと色の変化があります。誰かが解決策を知っていますか?

thx、tux

4

3 に答える 3

3

答えは、Flash は事前に乗算されたアルファ透明度で bitmapData を描画することです。Flash は基本的に、ほぼ透明なピクセルを別の値に丸めることによってメモリを節約します。画像を何度も積み重ねない限り、人間の目には知覚できません。これにより、ブラシのエッジが焦げたように見える色の丸め誤差が生じます。

他の人が指摘したように、マウスの位置の間でブラシを「歩く」必要がありますが、画像を重ねたときに発生する色の変化には対応できません。

代わりに、ブラシ ストロークを透明なビットマップに描画し、colorTransform メソッドを使用して、その新しいレイヤーを選択した色に着色します。マウスアップすると、その透明レイヤーがキャンバスに描画されます。(使用していないときは、余分なレイヤーを削除することを忘れないでください!)

于 2012-11-14T18:43:45.477 に答える
2

これは、Photshopがマウス座標間の距離を「歩き」、それもペイントするためです。したがって、2点間でマウスを非常に速く動かしている場合でも、コヒーレントな線が得られます。

マウスの更新ごとに1回だけ描​​画しているため、マウスの動きが非常に速い場合は、線ではなくスポットが表示されます。

これを解決するには、最後のマウス更新の位置を追跡し、追加の手順でペイントの間隔が遠すぎる場合を確認します。

于 2010-09-01T12:27:50.753 に答える
0

具体的には、mouseDown が発生するたびに一時的なビットマップを作成する必要があります。これにより、ブラシは白黒で描画されます。これにより、たとえば、描画されたブラシをアルファでいっぱいにしない場合に、より滑らかな結果が得られます。また、グレープフルクトが言ったように、ここでは「ウォーキング」テクニックを使用する必要があります。

最後に、mouseUp イベントが発生したら、(ブラシの色のために) ビットマップの色を変更し、必要に応じていくつかのフィルターを追加して、メインのビットマップに描画する必要があります。

于 2010-09-01T13:11:07.690 に答える