1

AS2を使用して、外部サイトからSWFにいくつかの画像を動的にインポートしています。コンピューターから画像をロードすると完全に機能しますが、外部サーバーから画像をロードしようとすると、スムージングが機能しません。

私のコード:

    var imageLoad:MovieClipLoader = new MovieClipLoader();
    imageLoad.addListener({
        onLoadInit:function (target:MovieClip) {
            target._quality = "BEST";
            target._width = 160;
            target._yscale = target._xscale;
            if (target._height>105) {
                target._height = 105;
                target._xscale = target._yscale;
            }
            target.forceSmoothing = true;
        }
    });
imageLoad.loadClip(imageURL,imageMC);

私はネット上で見つけたすべての解決策を試しましたが、誰もスムージングに取り組んでいませんでした...

これに対する解決策はありますか?

4

3 に答える 3

1

確かではありませんが、あなたが抱えている問題は、クロスドメインの問題の兆候のようです。クロスドメインポリシーファイルで許可されていない限り、ロードされたSWFプロパティ(この場合はスムージング)が別のドメインから発信されている場合、それを変更することはできません。

それが問題ではない場合は、bitmapDataを根本的に描画することで常にうまくいったことを覚えています。結果が黒い画像の場合は、ほとんどの場合、クロスドメインの問題が発生しているはずです。この記事では、AS2の手法について正確に説明します。

http://www.kaourantin.net/2005/12/dynamically-loading-bitmaps-with.html

于 2009-09-03T22:51:31.553 に答える
1

スケーリングマトリックスを使用して別のBitmapDataに描画するのはどうですか?ビットマップ自体をスケーリングするよりもスムーズになると聞きました...

以下のコードはここからです。

// source in this example is a DisplayObject
var temp:BitmapData = new BitmapData( sourceWidth, sourceHeight );
temp.draw( source );

var output:BitmapData = new BitmapData( outputWidth, outputHeight );

var matrix:Matrix = new Matrix();
matrix.scale( outputWidth / sourceWidth, outputHeight / sourceHeight );

output.draw( temp, matrix, null, null, null, true );
temp.dispose();
于 2009-09-09T06:16:14.097 に答える
1

AS2...ああ...思い出(悪夢のようなもの)。

私の「古き良き」BitmapLoader.asを試してみてください...私は何年もそれを使用してきましたが、まだ失敗したことはありません...美しく書かれておらず、そこにはいくつかのダブルスコープセッターがあります...しかし、私は気にしないでください。それは古いものであり、その仕事を完璧に (常に!) 行っています。スムージングをtrueまたはfalseに設定するコンストラクターにブール値が必要です

import flash.display.BitmapData;

class BitmapLoader extends Object {

    private var mLoader : MovieClipLoader;
    private var scope : Object;
    private var _mc : MovieClip;
    private var _url : String;
    private var _func : Object;
    private var smooth : Boolean;

    public function BitmapLoader(smooth : Boolean) 
    {
        this.smooth = smooth;
        mLoader = new MovieClipLoader( );
        addListener( this );    
    }

    public function addListener(inListener : Object) : Void 
    {
        mLoader.addListener( inListener );
        scope = inListener;
    }

    public function removeListener(inListener : Object) : Void 
    {
        mLoader.removeListener( inListener );
    }

    private function onLoadInit(inTarget : MovieClip) : Void 
    {
        var bitmap : BitmapData = new BitmapData( inTarget._width, inTarget._height, true, 0x000000 );      
        bitmap.draw( inTarget );
        var parent : MovieClip = inTarget._parent;
        var img : MovieClip = parent.createEmptyMovieClip( "imageloader_smooth_mc", parent.getNextHighestDepth( ) );
        inTarget.unloadMovie( );
        inTarget.removeMovieClip( );
        delete inTarget;
        img.attachBitmap( bitmap, img.getNextHighestDepth( ), "never", true );
        scope[_func]( img );
    }

    private function onLoadError(errorCode : String, httpStatus : Number) : Void 
    {
        error( errorCode, httpStatus );
    }

    /**
     * loadBitmap( http://www.test.nl/img.jpg, movieclip, "dothis");
     */
    public function loadBitmap(url : String, mc : MovieClip, func : Object) : Void 
    {
        _url = url;
        _mc = mc;
        _func = func;
        var raw : MovieClip = _mc.createEmptyMovieClip( "imageloader_raw_mc", _mc.getNextHighestDepth( ) );
        mLoader.loadClip( _url, raw );
    }

    private function error(errorCode : String, httpStatus : Number) : Void 
    {
        var raw : MovieClip = _mc.createEmptyMovieClip( "imageloader_raw_mc", _mc.getNextHighestDepth( ) );
        mLoader.loadClip( "img/notfound.jpg", raw );
    };
}

このクラスは次のように使用できます。

    var loader : BitmapLoader = new BitmapLoader( true );
loader.addListener( this );
loader.loadBitmap( "http://test.nl/example.jpg", this, "doneLoading" );

「true」は平滑化ブール値、addListener( this ) はスコープの問題 (AS2-bleeh) を防止するためのもの、「doneLoading」は読み込みが完了したときに呼び出す関数名です。

これがうまくいくことを願っています。

幸運を!

于 2009-09-04T06:28:16.507 に答える