0

我正在使用 UILoader 加载我没有来源的 SWF 文件。这些 SWF 文件是在 AS2 中创建的。他们使用口罩。宽度和高度返回未屏蔽的值。

我正在尝试找到剪辑的可见宽度和高度,以便正确缩放它。

例如,我希望 SWF 适合 50x50 的空间。可见的 SWF 为 65x65(但我不知道),未屏蔽的大小为 100x100。如果我将加载的影片剪辑的宽度和高度设置为 50x50,Flash 会根据未蒙版部分缩放剪辑,而我得到的剪辑太小了。请记住,我无法控制 SWF 内容,因此我无法覆盖宽度/高度或获取蒙版大小。

4

2 回答 2

1

如果没有跨域问题并且内容不是太大(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);
}

这将为您提供包含 alpha 值为 0xff(完全不透明)的所有像素的矩形。

于 2010-08-23T13:32:33.843 回答
0

几个想法:

  • 方法 1- 反编译 AS2 swfs,然后覆盖宽度和高度属性以返回掩码的宽度和高度

  • 方法 2- 创建一个新的 AS2 swf,它将尝试检索加载的 swf 掩码的尺寸。由于我不使用 AS2 ,我将仅解释逻辑。测试你的电影的 mask 属性,如果它不为空,获取宽度和高度,如果为空,对每个孩子做同样的测试,如果一个孩子返回一个真值,跳出你的循环并返回宽度和高度孩子的面具。当然,如果是几个孩子都用口罩,这样就不太好用了,这种情况下,你可以试试看哪个口罩更大……

于 2010-08-23T07:34:42.280 回答