在AS3中查找(加载)图像大小(Action Script 3.0)

时间:2008-12-23 13:29:04

标签: actionscript-3 image size dimension

我目前正在使用以下函数来加载图像,但我找不到找到加载图像宽度的方法,我想在使用相同函数放置下一个图像之前使用它。

请注意,q是一个变量(数字),用于加载不同的图像。

= X我需要帮助获得加载的图像宽度......

function LoadImage(q)
{
    var imageLoader:Loader = new Loader();
    var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg");
    imageLoader.load(image);
    addChild (imageLoader);
    imageLoader.x = 0 + CurrentXLength;
    imageLoader.y = 0;
    imageLoader.name = "image"+q;
    trace(imageLoader.x)
}

4 个答案:

答案 0 :(得分:12)

在实际加载之前,您无法知道位图的宽度:

function LoadImage(q)
{
    var imageLoader:Loader = new Loader();
    var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg");
    imageLoader.contentLoader.addEventListener(Event.COMPLETE, ImageLoaded);
    imageLoader.load(image);
    addChild (imageLoader);
    ...


private function ImageLoaded(e:Event):void
{
    var imageLoader:Loader = Loader(e.target.loader);
    var bm:Bitmap = Bitmap(imageLoader.content);
    var CurrentXLength = bm.width;
    ....

Alternativly this link可能会有帮助吗?我自己没试过......

答案 1 :(得分:2)

我刚刚询问了loader对象的de width属性:

var loader:Loader;

function loadImage(dir:String):void {
    loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, placeImage);
    var urlReq:URLRequest = new URLRequest(direccion);
    loader.load(urlReq);
}

function placeImage(o:Event):void {
    loader.x = (1360 - loader.width)/2;
    loader.y = (768 - loader.height)/2;
    addChild(loader);
}

其中1360和768是画布尺寸......

答案 2 :(得分:1)

要访问宽度,必须在分配用于处理Event.COMPLETE的函数中执行此操作。

“你需要一个包含你想要加载的项目的数组。你应该用XML加载这些数据,这样它就是动态的和可扩展的。一旦加载了xml数据,它应该以任何方式分配给一个数组在这种情况下我们必须使用数组,而不仅仅是使用XML对象(本质上是一个数组)的原因是因为你需要知道一个对象的宽度,这样你就可以将下一个对象的X位置放在最后一个对象X位置加上它的WIDTH。

使用XML通常使用for循环并且只需迭代“x”次。在这种情况下,我们不希望这样。要获取已加载资源的“WIDTH”属性,必须在加载器触发Event.COMPLETE时从分配给fire的函数中访问它。图像完成后,它将从数组中删除项目,设置一个变量,指向lastX和lastWidth,然后获取数组中的下一个项目并从头开始。最后,数组为空,过程完成。

注意:我将跳过加载XML并自己将数据注入数组。

package
{
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.net.URLRequest;

    public class DocumentClass extends Sprite
    {
        private var _array:Array;
        private var _lastX:Number;
        private var _lastWidth:Number;

        public function DocumentClass():void
        {
            _array = new Array();
            //Add Items to an array however you wish.  I did it
            //this way to make it easier to read on this site.

            _array.push({name: "image1", path: "path/to/image1"});
            _array.push({name: "image2", path: "path/to/image2"});
            _array.push({name: "image3", path: "path/to/image3"});

            loadImage();
        }
        private function loadImage():void
        {
            if(_array.length > 0)
            {
                var loader:Loader = new Loader();
                addChild(loader);

                var request:URLRequest = new URLRequest(_array[0].path); //Loads first item in the array each time.
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
                loader.x = _lastX + _lastWidth;
                laoder.load(request);

                _lastX = loader.x; //We set after so we are ready for the next.

                _array.shift(); //Remove the first item from the array.
            }
        }
        function onImageLoaded(e:Event):void
        {
            _lastWidth = e.target.width;
            loadImage(); //Attempt to load another image if the array isn't empty.
        }
    }
}

我希望这会有所帮助,代码未经过测试,但概念似乎有效。

答案 3 :(得分:0)

是的,我使用了scott的答案,但值得注意的是'imageLoader.contentLoader'应该是LoadImage()函数中的'imageLoader.contentLoaderInfo'。为我解决了宽度问题 - 谢谢你们。