Actionscript 3 如何调整动态加载到flash中的图像大小(as3)

Actionscript 3 如何调整动态加载到flash中的图像大小(as3),actionscript-3,flash-cs4,image-scaling,image-resizing,Actionscript 3,Flash Cs4,Image Scaling,Image Resizing,我正在努力寻找正确的as3代码来调整图像的大小,一旦它被动态调用到舞台上并放置在MC中。 我使用以下方式加载: var myLoader :Loader = new Loader(); mc.addChild(myLoader); var url :URLRequest = new URLRequest("myimage.jpg"); myLoader .load(url ); 舞台最终将全屏打开(工作正常),因此我需要保持图像的原始大小,这比舞台大得多 我需要做的是在加载时将其收缩到与舞

我正在努力寻找正确的as3代码来调整图像的大小,一旦它被动态调用到舞台上并放置在MC中。 我使用以下方式加载:

var myLoader :Loader = new Loader(); 
mc.addChild(myLoader);
var url :URLRequest = new URLRequest("myimage.jpg"); 
myLoader .load(url );
舞台最终将全屏打开(工作正常),因此我需要保持图像的原始大小,这比舞台大得多

我需要做的是在加载时将其收缩到与舞台相同的高度,同时保持宽度成比例(哦,并将其居中)。 我尝试了各种代码,但找不到任何工作,因为我所做的只是调整包含图像的MC的大小,而不是图像本身。 如能提供有关正确代码的任何指导,将不胜感激

我猜这很简单

 "myimage".x=600;
但是如果是这样的话,写图片名称的正确方法是什么,就像我写的那样,似乎是错误的。 非常感谢


Ed

您需要添加一个侦听器来侦听正在加载的初始化事件

而且您不需要调整image.jpg文件本身的大小(并且您试图解决它的方式也行不通)。您可以改为调整加载程序的大小

如果您查看LoaderInfo的AS3文档,您将在最后找到一个示例,该示例演示如何添加侦听器。(请注意,侦听器被添加到contentLoaderInfo对象,而不是加载程序本身)


然后,您可以使用事件处理程序来调整大小。AS3文档在initHandler中显示了一个示例,该示例只跟踪了一些内容。如果您加载了loader.x=600,那么您将得到所需的内容。

您必须等待图像加载,然后可以调整加载程序的大小,例如:

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);
  }
 }
}
包{
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.display.DisplayObject;
导入flash.display.Loader;
导入flash.display.LoaderInfo;
导入flash.events.Event;
公共类测试扩展了Sprite{
公共功能测试(){
超级();
如果(阶段){
init();
}否则{
addEventListener(Event.ADDED_TO_STAGE,init,false,0,true);
}
}
公共var-mc:MovieClip;
私有函数init(e:Event=null):void{
如果(e!=null){
e、 removeEventListener(e.type,arguments.callee);
}
mc=新的MovieClip();
addChild(mc);
var myLoader:Loader=new Loader();
mc.addChild(myLoader);
//当图像完全加载时收听
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
var url:URLRequest=newurlRequest(“myimage.jpg”);
加载(url);
}
私有函数onImageLoaded(e:事件):void{
变量li:LoaderInfo=e.target作为LoaderInfo;
removeEventListener(e.type,arguments.callee);
//在保留比率的同时调整加载程序的大小
变量ldr:Loader=li.Loader;
var mw:数量=阶段宽度/ldr宽度;
var mh:数量=舞台高度/ldr高度;
var比率:数值=(mw
您也可以在
尝试加载程序类

他们在简化和简化加载过程方面做得很好,而且还有一些额外的好处

检查ImageLoader类

特别是如何在加载之前设置一组可选的vars属性

下面是文档中给出的示例的一个小摘录

//create an ImageLoader: var loader:ImageLoader = new ImageLoader("img/photo1.jpg", //here's the sweet part :) {name:"photo1", container:this, x:180, y:100, width:200, //here you could set the stageWidth for instance height:150, //and the stageHeight here scaleMode:"proportionalInside", //this one will definitely help you , check the docs! centerRegistration:true, onComplete:onImageLoad}); //创建图像加载器: var-loader:ImageLoader=newimageloader(“img/photo1.jpg”, //这是最甜蜜的部分:) {名称:“照片1”, 集装箱:这个,, x:180, y:100, 宽度:200,//这里您可以设置stageWidth作为示例 高度:150,//这里的舞台扶手 scaleMode://这一个肯定会帮助你,检查文档! 中心注册:对, onComplete:onImageLoad});
我在上面的代码中有很多错误,显然我说不能使用嵌套的公共类或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);
  }
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.display.DisplayObject;
导入flash.display.Loader;
导入flash.display.LoaderInfo;
导入flash.events.Event;
var myLoader:Loader=new Loader();
mc.addChild(myLoader);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
var url:URLRequest=newurlRequest(“im1.jpg”);
加载(url);
函数onImageLoaded(e:事件):void{
变量位:位图=e.target.content;
如果(位!=null)
位平滑=真;
变量li:LoaderInfo=e.target作为LoaderInfo;
removeEventListener(e.type,arguments.callee);
变量ldr:Loader=li.Loader;
var mw:数量=阶段宽度/ldr宽度;
var mh:数量=舞台高度/ldr高度;
var比率:数值=(mw
甚至在那里添加了一些平滑。 我需要研究一下,因为我不确定公共和私人职能之间的区别是什么

还有一个问题,我可以成功地动态加载图像,如果它们与正在加载它们的swf位于同一文件夹中,但是如果我尝试将图像保存在单独的文件中,并使用类似于

var url:URLRequest…等(“stills/image1.jpg”);他们就是不肯装。有什么不对劲吗

再次感谢您的帮助


埃德

我试着回答你的问题

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

我正在查找如何调整图像大小,我发现了这个方便的库

当flash缩小图像时,当您将其调整一半大小时,它的质量最好,然后继续调整一半大小,直到达到所需的大小

图书馆为你做了所有这些

网站上有一些例子
img1_mc.scaleX = (stage.stageWidth/img1_mc.width)
img1_mc.scaleY = (stage.stageHeight/img1_mc.height)
uiloader.autoLoad = true;
uiloader.scaleContent = true;
uiloader.source = "photos/yourphoto.jpg";
var my_loader:Loader = new Loader();
        my_loader.load(new URLRequest("underwater.jpg"));
        var holder:MovieClip=new MovieClip();
        my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(){
my_loader.content.width = stage.stageWidth;
my_loader.content.height = stage.stageHeight;