Динамическое изменение размера изображения

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

    private function Init() :void
{
    tileImg = new Image();
    tileImg.source = data.ICON;
    tileImg.toolTip = data.TITLE;
    tileImg.buttonMode = true;
    tileImg.addEventListener(Event.COMPLETE, AdjustImageDimensions); 
    this.addChild(tileImg);
} 

private function AdjustImageDimensions(e:Event):void
{ 
    tileImg.width = (e.currentTarget as Image).contentWidth; 
    tileImg.height = (e.currentTarget as Image).contentHeight;
}

person CodeQrius    schedule 11.11.2009    source источник


Ответы (2)


Хорошо, у меня была такая же проблема на днях, и я исправил ее с помощью класса Loader. Вы можете получить информацию после загрузки файла. Вам также понадобится прослушиватель событий, прикрепленный к загрузчику. Откуда вы вообще берете изображение? URL-адрес или файловая система?

Вот краткий пример:

package 

{импорт flash.display.Loader; import flash.events.Event; import flash.net.FileReference;

import mx.controls.Image;

public class MyItemRenderer
{
    private var fileRef:FileReference = new FileReference();
    private var myLoader:Loader = new Loader();
    public var myDynamicImage:Image;

    public function MyItemRenderer()
    {
        fileRef.addEventListener(Event.SELECT, loadImageToCache);
        fileRef.addEventListener(Event.COMPLETE, sendToLoader);

        fileRef.browse( /* put file types in this array */ );
    }

    private function loadImageToCache(e:Event):void
    {
        fileRef.load();
    }

    private function sendToLoader(e:Event):void
    {
        myLoader.loadBytes(fileRef.data);
        myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, createImage);
    }

    private function createImage(e:Event):void
    {
        var file:Loader = Loader(e.target);

        myDynamicImage = new Image();
        myDynamicImage.source = file;
        myDynamicImage.width = file.width;
        myDynamicImage.height = file.height;
    }
    //now that would be great if you can control the width and height 
    //of these images at runtime, BUT, 
    //chances are if their dynamically loaded, you can't so here...

    private function getImgAR(file:Loader):Number
    {
        return file.width/file.height;
    }

    //then use this createImage function instead...

    /*

    private function createImage(e:Event):void
    {
        var file:Loader = Loader(e.target);
        myDynamicImage = new Image();
        myDynamicImage.source = file;
        myDynamicImage.width = 120*getImgAR(file); //you can substitue 120 for your required size
        myDynamicImage.height = 120;//same here
    }

    */
}

}

надеюсь, это поможет

person Adrian    schedule 11.11.2009

Значения свойств contentWidth и contentHeight равны не окончательный, когда запускается событие complete. Вы можете получить значение после запуска события updateComplete.

person Amarghosh    schedule 11.11.2009
comment
да. Это то, что я пробовал сначала. Но ширина и высота, которые я получил на этапе updateComplete, были равны нулю и нулю. Но когда я попытался использовать событие Complete, я получил реальные значения. Проблема в том, что изображению не присваиваются эти значения. Или их назначают, но изображение визуально не меняет размер. - person CodeQrius; 11.11.2009