Поиск (загруженного) размера изображения в AS3 (Action Script 3.0) - PullRequest
5 голосов
/ 23 декабря 2008

В настоящее время я использую следующую функцию для загрузки изображения, однако я не смог найти способ найти ширину загруженного изображения, который я намерен использовать перед размещением следующего изображения с помощью той же функции.

Обратите внимание, что 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 ]

12 голосов
/ 23 декабря 2008

Вы не можете знать ширину растрового изображения, пока он фактически не загружен:

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;
    ....

Альтернативно эта ссылка может быть полезна? Сам не пробовал ...

2 голосов
/ 20 декабря 2011

Я только что запросил свойство 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 - размеры холста ...

1 голос
/ 23 декабря 2008

Чтобы получить доступ к ширине, вы должны сделать это в функции, назначенной для обработки Event.COMPLETE.

"Вам понадобится массив, содержащий элементы, которые вы хотите загрузить. Вероятно, вам следует загрузить эти данные с помощью XML, чтобы они были динамичными и масштабируемыми. После загрузки XML-данных их следует назначить массиву любым способом, который вам нужен. Например, причина, по которой мы должны использовать массив в этой ситуации, а не просто использовать объект XML, который по сути является массивом, заключается в том, что вам нужно знать ширину объектов, чтобы вы могли основывать следующие позиции X на позиции вне последние объекты X позиция плюс его ширина.

В XML обычно используют цикл for и просто повторяют количество раз «x». Мы не хотим этого, в этом случае. Чтобы получить свойство «WIDTH» загруженного актива, к нему необходимо обратиться из функции, назначенной для запуска, когда загрузчик запускает Event.COMPLETE. Как только изображение будет завершено, оно удалит элемент из массива, установит переменную 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.
        }
    }
}

Надеюсь, это поможет, код не протестирован, но концепция кажется верной.

0 голосов
/ 28 августа 2009

Да, я использовал ответ Скотта, но стоит отметить, что imageLoader.contentLoader должен быть 'imageLoader.contentLoaderInfo' в функции LoadImage (). Решил проблему ширины для меня - спасибо, Манг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...