4

画像が動的にステージに呼び出されてMCに配置されると、画像のサイズを変更するための適切なas3コードを見つけるのに苦労しています。私は以下を使用してロードしています:

var myLoader :Loader = new Loader(); 
mc.addChild(myLoader);
var url :URLRequest = new URLRequest("myimage.jpg"); 
myLoader .load(url );

ステージは最終的にフルスクリーンで開きます(正常に動作します)ので、ステージよりもはるかに大きい元のサイズで画像を保持する必要があります。

私がする必要があるのは、幅を比例させながら(ああ、それを中央に)、ステージと同じ高さにロードするときにそれを縮小することです。私はあらゆる種類のコードを試しましたが、画像を含むMCのサイズを変更するだけで、画像自体のサイズを変更することができなかったため、機能するものが見つかりませんでした。正しいコードに関するガイダンスをいただければ幸いです。

私はそれが次のようなものと同じくらい簡単だと思います

 "myimage".x=600;

しかし、もしそうなら、私が書いたように、画像名を書く正しい方法は何ですか?それは間違っているようです。どうもありがとう

エド

4

9 に答える 9

9

私はあなたの質問に答えようとします

 import flash.display.MovieClip;
 import flash.display.Sprite;
 import flash.display.DisplayObject;
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.events.Event;

   var myLoader:Loader = new Loader(); 
   var image:Bitmap;
   var url :URLRequest = new URLRequest("im1.jpg");
   myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
   myLoader.load(url);

   function onImageLoaded(e:Event):void {
      image = new Bitmap(e.target.content.bitmapData);
      var mw:Number = stage.stageWidth;
      var mh:Number = stage.stageHeight;   
      /* if you set width and height image same with the stage use this */
      image.width = mw;
      image.height = mh;
      mc.addChild(image);
   }
于 2010-09-29T03:56:29.117 に答える
3

イメージがロードされるのを待つ必要があります。その後、ローダーのサイズを変更できます。たとえば、次のようにします。

package {
 import flash.display.MovieClip;
 import flash.display.Sprite;

 import flash.display.DisplayObject;
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.events.Event;

 public class Test extends Sprite {

  public function Test(){
    super();

    if (stage) {
      init();
    } else {
     addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
    }
  }

  public var mc:MovieClip;

  private function init(e:Event=null):void{
   if (e!=null) {
     e.target.removeEventListener(e.type, arguments.callee);
   }

   mc = new MovieClip();
   addChild(mc);

   var myLoader:Loader = new Loader(); 
   mc.addChild(myLoader);

   // listen when the image is fully loaded
   myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);


   var url :URLRequest = new URLRequest("myimage.jpg"); 
   myLoader.load(url);
  }

  private function onImageLoaded(e:Event):void {
   var li:LoaderInfo = e.target as LoaderInfo;
   li.removeEventListener(e.type, arguments.callee);

   // resize the loader while preserving ratio
   var ldr:Loader=li.loader;
   var mw:Number = stage.stageWidth / ldr.width;
   var mh:Number = stage.stageHeight / ldr.height;

   var ratio:Number = (mw < mh) ? mw : mh;

   ldr.width *= ratio;  // you can also use ldr.scaleX=ratio;
   ldr.height *= ratio; // you can also use ldr.scaleY=ratio;

   // center mc on stage
   mc.x=0.5*(stage.stageWidth-mc.width);
   mc.y=0.5*(stage.stageHeight-mc.height);
  }
 }
}
于 2010-09-25T08:35:40.353 に答える
3

このコードを試してください:

img1_mc.scaleX = (stage.stageWidth/img1_mc.width)
img1_mc.scaleY = (stage.stageHeight/img1_mc.height)
于 2012-01-20T17:50:01.757 に答える
2

http://www.greensock.com/loadermax/で Loader クラスを試すこともできます。

彼らは、ロードプロセスを簡素化および合理化する素晴らしい仕事をしており、その上にいくつかの素晴らしい特典があります.

ImageLoader クラスを確認して ください http://www.greensock.com/as/docs/tween/com/greensock/loading/ImageLoader.html

特に、ロードする前に一連のオプションの vars プロパティを設定する方法。

これは、ドキュメントに記載されている例からの小さな抜粋です...

//ImageLoader を作成します。
 var loader:ImageLoader = new ImageLoader("img/photo1.jpg",
 //ここが甘い部分です:)
 {name:"写真1",
 コンテナ:これ、
 x:180、
 y:100,
 width:200, //ここでたとえばstageWidthを設定できます
 height:150, //そしてここにstageHeight
 scaleMode:"proportionalInside", //これは間違いなく役に立ちます。ドキュメントを確認してください!
 centerRegistration:真、
 onComplete:onImageLoad});

于 2010-09-25T09:14:41.947 に答える
1

上記のコードで大量のエラーが発生しました。ネストされたパブリッククラスやsoemthingを使用できないと思われるため、パッケージとパブリック関数を削除して、このコードで動作させました。

     import flash.display.MovieClip;
 import flash.display.Sprite;
 import flash.display.DisplayObject;
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.events.Event;
   var myLoader:Loader = new Loader(); 
   mc.addChild(myLoader);
   myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
   var url :URLRequest = new URLRequest("im1.jpg"); 
   myLoader.load(url);
function onImageLoaded(e:Event):void {
   var bit:Bitmap = e.target.content;
    if(bit != null)
    bit.smoothing = true;
   var li:LoaderInfo = e.target as LoaderInfo;
   li.removeEventListener(e.type, arguments.callee);
   var ldr:Loader=li.loader;
   var mw:Number = stage.stageWidth / ldr.width;
   var mh:Number = stage.stageHeight / ldr.height;
   var ratio:Number = (mw < mh) ? mw : mh;
   ldr.width *= ratio;  // you can also use ldr.scaleX=ratio;
   ldr.height *= ratio; // you can also use ldr.scaleY=ratio;
   mc.x=0.5*(stage.stageWidth-mc.width);
   mc.y=0.5*(stage.stageHeight-mc.height);
  }

そこにスムージングも追加しました。公的機能と私的機能の違いがわからないので、勉強する必要があります。

もう1つの問題は、画像を読み込んでいるswfと同じフォルダーにある場合は動的に画像を正常に読み込むことができますが、画像を別のファイルに保持して、次のような名前で呼び出す場合です。

var url:URLRequest ... etc( "stills / image1.jpg"); 彼らはただロードしません。何か問題がありますか?

再び支援に感謝します

エド

于 2010-09-27T14:58:09.383 に答える
0

ロードしているものの INIT イベントをリッスンするリスナーを追加する必要があります。

また、image.jpg ファイル自体のサイズを変更する必要はありません (それに対処しようとしている方法は機能しません)。代わりに、ローダーのサイズを変更できます。

AS3 Docs for LoaderInfo を確認すると、最後にリスナーを追加する方法を示す例があります。(リスナーはローダー自体ではなく、contentLoaderInfo オブジェクトに追加されることに注意してください)。

その後、イベント ハンドラーを使用してサイズ変更を行うことができます。AS3 Docs は、いくつかのものをトレースするだけの initHandler の例を示しています。loader.x = 600 を実行すると、必要なものが得られます。

于 2010-09-25T08:30:23.303 に答える
0

画像のサイズを変更する方法を調べていたところ、この便利なライブラリを見つけましたhttp://jacwright.com/blog/221/high-quality-high-performance-thumbnails-in-flash/

フラッシュが画像のサイズを縮小するときは、半分にサイズ変更し、目的のサイズになるまで半分にサイズ変更し続けると、最高の品質になります

図書館はあなたのためにそれをすべて行います

ウェブサイトにはいくつかの例と彼のグーグルコードページへのリンクがあります

まさにあなたが望むものではないかもしれませんが、それはかなりうまくいきます

于 2010-09-30T10:40:59.817 に答える