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

试试这个代码:

img1_mc.scaleX = (stage.stageWidth/img1_mc.width)
img1_mc.scaleY = (stage.stageHeight/img1_mc.height)
于 2012-01-20T17:50:01.757 回答
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 回答
2

您也可以在
http://www.greensock.com/loadermax/尝试加载器类

他们在简化和简化加载过程方面做得很好,除此之外还有一些不错的好处。

检查 ImageLoader 类 http://www.greensock.com/as/docs/tween/com/greensock/loading/ImageLoader.html

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

这是文档中给出的示例的一小部分摘录...

//创建一个ImageLoader:
 var loader:ImageLoader = new ImageLoader("img/photo1.jpg",
 //这是甜蜜的部分:)
 {名称:“照片1”,
 容器:这个,
 x:180,
 是:100,
 width:200, //这里你可以设置 stageWidth 例如
 height:150, //这里还有stageHeight
 scaleMode:"proportionalInside", //这个肯定会帮助你,检查文档!
 中心注册:真,
 onComplete:onImageLoad});

于 2010-09-25T09:14:41.947 回答
1

上面的代码有很多错误,显然说不能使用嵌套的公共类或某些东西,所以我删除了包和公共函数,并让它与这段代码一起工作

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

甚至在那里添加了一些平滑。我需要学习,因为我不确定公共职能和私人职能之间的区别是什么?

另一个问题家伙,如果它们与加载它们的 swf 在同一个文件夹中,我可以成功地动态加载图像,但是如果我尝试将图像保存在一个单独的文件中并用类似的东西调用它们

var url:URLRequest...etc ("stills/image1.jpg"); 他们只是不会加载。看出什么不对了吗??

再次非常感谢您的帮助

埃德

于 2010-09-27T14:58:09.383 回答
0

我为此苦苦挣扎了一段时间,但如果您使用的是 AS3,只需将 uiloader 对象拖到舞台上并将其设置为源,最重要的是,将 scaleContent 属性设置为 true...。

这对我来说很好,并且需要更少的代码:

uiloader.autoLoad = true;
uiloader.scaleContent = true;
uiloader.source = "photos/yourphoto.jpg";
于 2014-07-21T13:58:19.997 回答
0

我也有这样的问题,你可以试试这个.....它对我有用

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;
于 2014-12-18T17:38:38.173 回答
0

我只是在查找如何调整图像大小,发现了这个方便的库http://jacwright.com/blog/221/high-quality-high-performance-thumbnails-in-flash/

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

图书馆为你做所有这些

该网站有一些示例和指向他的谷歌代码页的链接

可能不是你想要的,但它确实工作得很好

于 2010-09-30T10:40:59.817 回答
0

您需要添加一个侦听器来侦听您正在加载的 INIT 事件。

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

如果您查看 LoaderInfo 的 AS3 文档,您会在末尾找到一个示例,该示例显示了如何添加侦听器。(请注意,监听器被添加到 contentLoaderInfo 对象,而不是 Loader 本身)。

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

于 2010-09-25T08:30:23.303 回答