1

AS3/Haxe で SWF を別の SWF にロードしようとしています。読み込まれた SWF にはいくつかの画像が含まれていますが、一部のShape.graphics要素のみです。(みたいなgraphics.beginBitmapFill();…) この画像は平滑化されておらず、ジャギーです。実行時にこの画像を滑らかにすることはできますか? 興味のあるハック!:)

前もって感謝します!トム

更新:申し訳ありませんが、私は、ロードされたバイトをハックし、AVM1 SWF を AVM2 に変換する AVM2Loader を使用して、より多くの AS2-SWF (AVM1) を 1 つの AS3-SWF (AVM2) にロードしていることを忘れています。良い。:)

Shapesしたがって、これらの SWF では、画像/ビットマップを見つける必要がありgraphicsますが、「画像」を持つ要素のみが見つかりました。これをクリアすると、すべての画像がなくなるので、画像はスムージングなしgraphicsで一部にあると思います。graphics.beginBitmapFill(...);可能であれば、それらに到達し、実行時にスムージングをオンにしたいと考えています。(初めてで十分に理解できなかった場合は申し訳ありません。)

編集(14年1月23日):解決策を見つけました。高速ではなく、Flash Player 11.6 が必要です。すべてMovieClipのグラフィック プロパティには新しい関数があり、MC 全体を描画するreadGraphicsDataすべてのグラフィック コマンド ( ) を提供します。Vector IGraphicsDataこれらのコマンドを繰り返し、すべてのbitmapFillコマンドsmoothパラメータを true に変更して MC を再描画すると、滑らかになり、きれいになります。それでおしまい。高速ではありませんが、機能しています。

4

3 に答える 3

0
function onLoad(event):Void
{
   pic.forceSmoothing  = true;
}
于 2013-03-28T12:39:59.787 に答える
0

スムージングは​​、デフォルトではオフになっているビットマップのプロパティです。

var image = new Bitmap(bitmapData);
image.smoothing = true;

通常、外部からロードする場合、bitmapData は loader.content.bitmapData にありますが、格納するかどうかはあなた次第です。


アップデート:

SWF の構造をまったく知らずに、読み込まれた SWF 内のすべての画像を滑らかにしたい場合は、その SWF の階層を再帰的に掘り下げ、オブジェクトがビットマップであるかどうかに応じて、オンにする必要があります。スムージング。

function recursivelySmooth(obj):void {
    for (var i:int = 0; obj.getChildAt(i); i++) {
        var item:* = obj.getChildAt(i);
        if (item is Bitmap) {
            item.smoothing = true;
        } else if (item.hasOwnProperty("numChildren") == true) {
            recursivelySmooth(item);
        }
    }
}

これはフリーハンドで書かれたので、すべてが正しいことを再確認する必要があるかもしれませんが、それが基本的な考え方です。swf で recursiveSmooth() を呼び出すだけで、子要素を持つことができるすべてのオブジェクトを掘り下げて滑らかにします。

于 2013-03-28T16:12:50.267 に答える