Установить размеры загруженного изображения во Flash - PullRequest
0 голосов
/ 11 апреля 2011

Как установить ширину и высоту загруженного изображения во Flash?Установка размеров сразу после запроса не работает.Ширина и высота остаются равными нулю.

var poster:Loader = new Loader();
Stage.addChild(poster);
poster.load(new URLRequest('http://example.com/image.jpg'));
poster.width = 320;
poster.height = 240;
trace(poster.width); // 0
trace(poster.height); // 0

Если я подожду немного и установлю размеры, это сработает.

Я попытался прослушать события Event.INIT и Event.COMPLETE, прежде чем изменять их размер, как это предлагается в некоторых руководствах.Ни одно из событий не было инициировано.

public function theClass() {
    this.poster = new Loader();
    this.poster.contentLoaderInfo.addEventListener(Event.INIT, this.imageLoaded);
    this.poster.contentLoaderInfo.addEventListener(Event.COMPLETE, this.imageLoaded);
    Stage.addChild(this.poster);
    this.poster.load(new URLRequest('http://example.com/image.jpg'));
}

private function imageLoaded(event:Event):void {
    trace('image is loaded');
    this.poster.width = 320;
    this.poster.height = 240;
}

Ответы [ 3 ]

4 голосов
/ 11 апреля 2011

В слушателе Event.COMPLETE есть способ сделать это, поэтому в коде загрузчика должно быть что-то не так, если это событие не вызывается.Я заметил, что вы, кажется, создаете локальную переменную "poster" в верхней части кода, который вы разместили, но не объявляете это внутри theClass (), но я не знаю, является ли это причиной вашей проблемы здесь.

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

Я имею в виду, я просто написал следующий код в качестве минимального тестаи работает нормально:

public function Main():void {
  var loader:Loader = new Loader();
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  loader.load(new URLRequest("image.png"));
}
private function onComplete(e:Event):void {
  var img:Bitmap = Bitmap(e.target.content);
  this.addChild(img);
  img.width = 100;
  img.height = 100;
}
1 голос
/ 12 апреля 2011

Изображение находится в другом домене, чем ваш SWF?Если это так, и ваш слушатель Event.COMPLETE не работает, это может быть связано с исключением безопасности.Сервер с файлом должен иметь файл политики crossdomain.xml, который разрешает доступ к домену, на котором размещен ваш swf, иначе вы не сможете напрямую управлять размером загруженного изображения, как показано в примере jhocking.

Если вы знаете, что на сервере, на котором размещено изображение, есть файл политики (перейдя по адресу http://site.com/crossdomain.xml и убедившись, что он позволяет использовать ваш домен или подстановочный знак, охватывающий ваш домен), то создайте loaderContext для вашего загрузчика.чтобы использовать этот параметр, установите для флага checkPolicyFile значение true:

var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
this.poster.load(new URLRequest('http://site.com/image.jpg'),context);

В обработчике onComplete выберите Loader. childAllowsParent , чтобы узнать, есть ли у вас доступ к содержимому загрузчика.Если это так, задайте loader.content.width и loader.content.height.

0 голосов
/ 11 апреля 2011

Обычно хорошей идеей является добавление прослушивателя IOErrorEvent для всех загрузок. Если есть проблема, то это скажет вам:

this.poster.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

function errorHandler(e:IOErrorEvent):void {
trace("Error on load: " + e);
}

Если в процессе загрузки возникнет проблема, вы ее поймаете.

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