我正在尝试在AS3 / Haxe中将SWF加载到另一个SWF中。加载的SWF包含一些图像 - 但仅限于某些Shape.graphics
元素。 (如graphics.beginBitmapFill();
...)
这些图像没有平滑和锯齿。
在运行时,无论如何都可以平滑这些图像吗?
任何黑客都感兴趣! :)
提前致谢! 汤姆
更新抱歉,我忘了提及,我正在使用AVM2Loader将更多AS2-SWF(AVM1)加载到一个AS3-SWF(AVM2)中加载字节,并将AVM1 SWF转换为AVM2 - 它工作得很好。 :)
因此,在这些SWF中,我需要找到图像/位图,但只找到Shapes
,其中graphics
元素具有'图像'。如果我清除了这个graphics
,那么所有图像都消失了,所以我认为,图像在某些graphics.beginBitmapFill(...);
中,没有平滑。我希望触及它们,并在运行时切换平滑,如果可能的话。
(对不起,如果我第一次不够清楚。)
编辑(2014年1月23日):我找到了解决方案。它并不快,并且需要Flash Player 11.6。每个MovieClip
图形属性都有一个新的readGraphicsData
函数,它提供绘制整个MC的所有图形命令(Vector IGraphicsData
)。并迭代这些命令,如果我将每个bitmapFill
命令smooth
参数更改为true,并重绘MC,它将被平滑,并且很好。
而已。不快,但工作。
答案 0 :(得分:1)
我找到了它的解决方案。它并不快,并且需要Flash Player 11.6。每个MovieClip
图形属性都有一个新的readGraphicsData
函数,它提供绘制整个MC的所有图形命令(Vector IGraphicsData
)。并迭代这些命令,如果我将每个bitmapFill
命令smooth
参数更改为true,并重绘MC,它将被平滑,并且很好。
而已。不快,但工作。
答案 1 :(得分:0)
function onLoad(event):Void
{
pic.forceSmoothing = true;
}
答案 2 :(得分:0)
Smoothing is a property of bitmaps默认情况下已关闭。
var image = new Bitmap(bitmapData);
image.smoothing = true;
通常情况下,在外部加载时,你的bitmapData将在loader.content.bitmapData中,但是你已经存储它了。
<强>更新强>
如果你想在不知道SWF结构的情况下平滑加载的SWF中的所有图像,那么你将不得不递归地挖掘该SWF的差异,并取决于该对象是否是一个Bitmap ,打开平滑。
function recursivelySmooth(obj):void {
for (var i:int = 0; obj.getChildAt(i); i++) {
var item:* = obj.getChildAt(i);
if (item is Bitmap) {
item.smoothing = true;
} else if (item.hasOwnProperty("numChildren") == true) {
recursivelySmooth(item);
}
}
}
这是徒手写的,所以你可能需要双重检查一切都是正确的,但这是基本的想法。只需在你的swf上调用recursivelySmooth(),它就会挖掘所有可以拥有子元素并平滑它们的对象。