在Flash中设置已加载图像的尺寸

时间:2011-04-11 17:59:33

标签: flash actionscript-3 actionscript

如何在Flash中设置加载图像的宽度和高度?请求后立即设置尺寸不起作用。宽度和高度保持为零。

var poster:Loader = new Loader();
Stage.addChild(poster);
poster.load(new URLRequest('http://example.com/image.jpg'));
poster.width = 320;
poster.height = 240;
trace(poster.width); // 0
trace(poster.height); // 0

如果我等待片刻然后设置尺寸,它就会起作用。

我尝试按照某些教程的建议调整Event.INIT事件和Event.COMPLETE事件,然后再调整大小。这两件事都没有被触发。

public function theClass() {
    this.poster = new Loader();
    this.poster.contentLoaderInfo.addEventListener(Event.INIT, this.imageLoaded);
    this.poster.contentLoaderInfo.addEventListener(Event.COMPLETE, this.imageLoaded);
    Stage.addChild(this.poster);
    this.poster.load(new URLRequest('http://example.com/image.jpg'));
}

private function imageLoaded(event:Event):void {
    trace('image is loaded');
    this.poster.width = 320;
    this.poster.height = 240;
}

3 个答案:

答案 0 :(得分:4)

在Event.COMPLETE的监听器中是这样做的方式,因此如果没有触发该事件,则加载器代码中必定存在错误。我注意到你似乎在你发布的代码的顶部创建了一个局部变量“poster”但是没有在theClass()中声明它,但我不知道这是否会导致你的问题。

另外,通常你要等到图像完成加载后才添加它,但我再次不知道这是否会导致你的问题。

我的意思是,我只是将以下代码编写为最小测试,并且工作正常:

public function Main():void {
  var loader:Loader = new Loader();
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  loader.load(new URLRequest("image.png"));
}
private function onComplete(e:Event):void {
  var img:Bitmap = Bitmap(e.target.content);
  this.addChild(img);
  img.width = 100;
  img.height = 100;
}

答案 1 :(得分:1)

图片是否与您的SWF不同?如果是这样,并且您的Event.COMPLETE侦听器不起作用,则可能是由于安全性异常。具有该文件的服务器必须具有允许访问您的swf托管的域的crossdomain.xml策略文件,否则您将无法直接操作加载的图像的大小,如jhocking的示例所示。

如果您知道托管图像的服务器上有一个策略文件(通过转到http://site.com/crossdomain.xml并看到它允许您的域或覆盖您的域的通配符),那么为您的加载器创建一个loaderContext用于将checkPolicyFile标志设置为true:

var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
this.poster.load(new URLRequest('http://site.com/image.jpg'),context);

在onComplete处理程序中,选中Loader。 childAllowsParent ,查看您是否有权访问加载程序内容。如果是这样,请设置loader.content.width和loader.content.height。

答案 2 :(得分:0)

向所有负载添加IOErrorEvent侦听器通常是个好主意。如果有问题,那么这将告诉您:

this.poster.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

function errorHandler(e:IOErrorEvent):void {
trace("Error on load: " + e);
}

如果加载过程出现问题,您就可以抓住它了。