Flash 在AS3中,如何获得包含遮罩的加载SWF的可见大小?

Flash 在AS3中,如何获得包含遮罩的加载SWF的可见大小?,flash,actionscript-3,mask,Flash,Actionscript 3,Mask,我正在使用UILoader来加载SWF文件,但我没有它的源代码。这些SWF文件是在AS2中创建的。他们使用面具。宽度和高度返回未屏蔽的值 我试图找到剪辑的可见宽度和高度,以便我可以适当地缩放它 例如,我希望一个SWF可以容纳在50x50的空间内。可见的SWF是65x65(但我不知道这一点),未屏蔽的大小是100x100。如果我将加载的movieclip的宽度和高度设置为50x50,Flash会根据未屏蔽部分缩放剪辑,我会得到一个缩放得太小的剪辑。请记住,我无法控制SWF内容,因此我无法覆盖宽度/

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

我试图找到剪辑的可见宽度和高度,以便我可以适当地缩放它

例如,我希望一个SWF可以容纳在50x50的空间内。可见的SWF是65x65(但我不知道这一点),未屏蔽的大小是100x100。如果我将加载的movieclip的宽度和高度设置为50x50,Flash会根据未屏蔽部分缩放剪辑,我会得到一个缩放得太小的剪辑。请记住,我无法控制SWF内容,因此我无法覆盖宽度/高度,也无法获得遮罩大小。

有几个想法:

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

  • 方法2-创建一个新的AS2 swf,它将尝试检索加载的swf掩码的维度。 因为我不使用AS2,所以我只解释一下逻辑。 测试电影的掩码属性,如果不为null,则获取宽度和高度;如果为null,则对每个子级执行相同的测试;如果有一个子级返回真值,则中断循环并返回子级掩码的宽度和高度。当然,如果几个孩子都使用面具,这不会太好,在这种情况下,你可以试着找出哪个面具更大


如果不存在跨域问题,并且内容不太大(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(完全不透明)的所有像素的矩形