В AS3, как получить видимый размер загруженного SWF, который содержит маску? - PullRequest
0 голосов
/ 23 августа 2010

Я использую UILoader для загрузки SWF-файлов, для которых у меня нет источника.Эти SWF-файлы были созданы в AS2.Они используют маски.Ширина и высота возвращают немаскированные значения.

Я пытаюсь найти видимую ширину и высоту клипа, чтобы правильно масштабировать его.

Например, я хочу, чтобы SWF помещался в пространство 50x50.Видимый SWF - 65x65 (но я этого не знаю), а немаскированный размер - 100x100.Если я установлю ширину и высоту загруженного фрагмента ролика на 50x50, Flash масштабирует клип на основе немаскированной части, и я получаю клип, масштабированный слишком маленьким.Имейте в виду, что я не контролирую содержимое SWF, поэтому не могу переопределить ширину / высоту или получить размер маски.

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Если проблем с кросс-доменами нет, а содержимое не слишком велико (BitmapData имеет ограничение по размеру), это должно работать:

function handleComplete(e:Event):void {
    var bmd:BitmapData = new BitmapData(loader.width,loader.height,true,0);
    bmd.draw(loader);
    var rect:Rectangle = bmd.getColorBoundsRect(0xff000000,0xff000000,true);
    trace(rect);
}

Это даст вам прямоугольник, содержащий все пиксели, альфа-значение которых равно0xff (полностью непрозрачный).

0 голосов
/ 23 августа 2010

пара идей:

  • Метод 1 - декомпилируйте SWF-файлы AS2, затем переопределите свойства width и height, чтобы вернуть ширину и высоту маски

  • Метод 2 - Создайте новый swf AS2, который попытается получить размеры маски загруженного swf. Поскольку я не использую AS2, я просто объясню логику. Протестируйте свойство маски вашего фильма, если оно не равно нулю, получите width & height, если null, сделайте одинаковый тест для каждого дочернего элемента, если один дочерний элемент возвращает истинное значение, вырвитесь из цикла и верните width & height детская маска. Конечно, это не будет работать слишком хорошо, если несколько детей используют маски, в таком случае, вы можете попытаться найти, какая маска больше ...

...