2009-09-03 6 views
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); 

に...これまでの任意の解決策を私はネット上で見つけることができるすべてのソリューションを試してきた、と誰もが平滑で働いていますか?

答えて

1

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

私の古き良きBitmapLoader.asを試してみてください...私は何年も使ってきましたが、まだ私を失敗させたことはありません...美しく書かれておらず、そこにいくつかの倍精度設定があります。 ..しかし私は気にしない。それは古く、それは完璧な仕事です(いつも!)。

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

が「本当」でスムージング・ブールである、のaddListener(本):それはあなたがこのようにこのクラスを使用することができます

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); 
    }; 
} 

真または偽

にスムージングを設定し、コンストラクタでのブーリアンを必要としますスコープ問題(AS2-bleeh)を防止することであり、 "doneLoading"は読み込みが完了したときに呼び出す関数名です。

これはうまく動作します。

幸運を祈る!

+0

これは、「doneLoading」関数で行うことができます。すなわち: \tパブリック関数doneLoading(MC:ムービークリップ):ボイド \t {\t \t mc._width = 160。 \t \t mc._yscale = mc._xscale; \t \t if(target。_height> 105) \t \t { \t \t \t mc._height = 105; \t \t \t mc._xscale = target._yscale; \t \t} \t} – Ypmits

1

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

これは問題ではない場合、私は根本的にビットマップデータを描画することは常にトリックをした覚えています。 結果が黒い画像の場合は、ほとんどの場合、ドメイン間の問題があると確信しています。 この記事では、正確にAS2のための技術について説明します。

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

+0

私が話しているサーバーにcrossdomain.xmlファイルがあるため、Crossdomainは問題になりません。そのコードの問題は、自分のコードで行うように、イメージのサイズを変更できないということです。どのようにアイデアのサイズを変更するには、私はそのコードを使用する任意のアイデアですか? –

1

スケーリング行列を使用して別のBitmapDataで描画することはどうですか? は、私は以下のコードがhereからである...それはビットマップそのものをスケーリングよりも滑らかになります

を聞きました。

// 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(); 
関連する問題