Actionscript: как узнать, когда свойство источника изображения полностью обновлено - PullRequest
0 голосов
/ 01 июня 2010
var I:Image=new Image();
I.source='C:\\Abc.png';
var H:int=I.height;

H всегда ноль!

Я предполагаю, что это потому, что изображение еще не закончило чтение файла png с диска.

Какое событие можно отслеживать, чтобы знать, когда его ширина и высота будут иметь правильные значения?

Кажется, что событие «Complete» работает только для загруженных изображений. Событие 'Render' происходит КАЖДЫЙ КАДР. (Недокументированное?) 'SourceChanged', происходит, как только источник меняется, и имеет ту же проблему!

Какое событие, которое я наблюдаю, сообщит мне, когда свойства ширины и высоты изображения будут иметь допустимые значения? Или есть какая-то синхронная версия I.source = 'xxx.png', о которой я не знаю?

P.S. Да, я знаю, что не должен использовать «C: \» в эфирной программе. Это было сделано только для иллюстрации, так что вы не будете предлагать мне использовать «Complete», который, кажется, никогда не срабатывает, когда файл, указанный источником, является локальным.

Ответы [ 4 ]

0 голосов
/ 02 июня 2010

Попробуйте использовать следующий код

    protected function init():void
    {
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayImage);            
        loader.load(new URLRequest('http://timeister.com/image.png'));
        return;         
    }

    protected function displayImage(event:Event):void
    {
        var loader:Loader = (event.target as LoaderInfo).loader;
        myImage.data   = loader.content;
        myImage.width  = loader.width;
        myImage.height = loader.height;
        this.height    = myImage.height;
        this.width     = myImage.width;
        this.visible = true;
        return;         
    } 
0 голосов
/ 01 июня 2010
var I:Image=new Image();
I.addEventListener(Event.COMPLETE, imageIsLoaded);
I.source='C:\\Abc.png';

function imageIsLoaded(event:Event):void
{
    // ...
}
0 голосов
/ 02 июня 2010

И победителем становится ... "изменить размер". Событие изменения размера срабатывает, как только изменяется размер изображения (от 0,0). Как только размеры изменяют размеры, ширина и высота становятся точными.

0 голосов
/ 01 июня 2010

Во-первых, sourceChanged - это событие, используемое для привязки. Каждое свойство Bindable имеет нечто подобное.

Complete должен запускаться при загрузке локальных файлов - в любом случае, согласно документации. Я ожидал бы, что он будет запускаться очень быстро в локальном файле, однако я бы ожидал задержку между загрузкой файла и добавлением этого содержимого в родительский файл, расположением и размером. Эта задержка - то, почему высота и ширина не доступны сразу.

Я вижу несколько разных подходов. Сначала вам нужно взглянуть на FlexControl LifeCycle и переопределить updateDisplayList (), чтобы вы знали, когда размер элемента (я подозреваю, contentHolder).

Вторым может быть переопределение contentHeight или contentWidth, чтобы они отправляли указанные события Bindable для высоты и ширины.

В-третьих, переопределить метод doScaleContent; который, кажется, где высота и ширина contentHolder установлены.

Выберите. Я не уверен, каков ваш вариант использования; так что не могу уточнить больше.

...