Поиск (загруженного) размера изображения в AS3 (Action Script 3.0)

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

Обратите внимание, что 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)
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
26 147
4

Ответы 4

Чтобы получить доступ к ширине, вы должны сделать это в функции, назначенной для обработки 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.
        }
    }
}

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

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

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

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

Спасибо, это помогло, хотя я думаю, что это код content_loader.contentLoaderInfo.addEventListener(Event.CO, а не imageLoader.contentLoader ...

Dan Rosenstark 18.04.2010 21:23

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

Я просто попросил указать свойство ширины объекта загрузчика:

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 - размеры холста ...

Другие вопросы по теме