1

我正在尝试将 SWF 加载到 AS3/Haxe 中的另一个中。加载的 SWF 包含一些图像 - 但仅在某些Shape.graphics元素上。(像graphics.beginBitmapFill();...)这个图像没有平滑,锯齿状。在运行时无论如何都可以平滑这些图像吗?任何有兴趣的黑客!:)

提前致谢!汤姆

更新:对不起,但我忘了提及,我正在使用AVM2Loader将更多的 AS2-SWF (AVM1) 加载到一个 AS3-SWF (AVM2) 中,这会破解加载的字节,并将 AVM1 SWF 转换为 AVM2 - 它非常有效好。:)

因此,在这些 SWF 中,我需要找到图像/位图,但只找到了具有“图像”Shapesgraphics元素。如果我清除它graphics,那么所有图像都消失了,所以我认为,图像在一些graphics.beginBitmapFill(...);,没有平滑。如果可能的话,我想接触它们,并在运行时打开平滑。(对不起,如果我第一次不够清楚。)

编辑(2014 年 1 月 23 日):我找到了解决方案。它速度不快,需要 Flash Player 11.6。每个MovieClip图形属性都有一个新readGraphicsData函数,它给出所有图形命令 ( Vector IGraphicsData) 来绘制整个 MC。并在这些命令中进行迭代,如果我将每个bitmapFill命令smooth参数都更改为 true,然后重新绘制 MC,它将变得平滑且美观。就是这样。不快,但工作。

4

3 回答 3

1

我找到了解决方案。它速度不快,需要 Flash Player 11.6。每个MovieClip图形属性都有一个新readGraphicsData函数,它给出所有图形命令 ( Vector IGraphicsData) 来绘制整个 MC。并在这些命令中进行迭代,如果我将每个bitmapFill命令smooth参数都更改为 true,然后重新绘制 MC,它将变得平滑且美观。就是这样。不快,但工作。

于 2014-01-23T09:10:56.823 回答
0
function onLoad(event):Void
{
   pic.forceSmoothing  = true;
}
于 2013-03-28T12:39:59.787 回答
0

平滑是默认关闭的位图属性。

var image = new Bitmap(bitmapData);
image.smoothing = true;

通常,在外部加载时,您的 bitmapData 将位于 loader.content.bitmapData 中,但是否存储它取决于您。


更新:

如果您想在不了解 SWF 结构的情况下平滑加载的 SWF 中的所有图像,则必须递归地挖掘该 SWF 的层次结构,并根据对象是否为位图,打开平滑。

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(),它就会挖掘所有可以具有子元素的对象并平滑它们。

于 2013-03-28T16:12:50.267 回答