0

我正在尝试将 swf 文件加载到另一个 swf 中,然后从第一个中提取资产。

两个 swf 文件都是使用 OpenFL(在 FlashDevelop 中编译)创建的。

我可以轻松加载外部 swf 并将其转换为 SWF 对象(haxelib swf 库)。

但是我不能从 SWF 中提取图像?

var req:URLRequest = new URLRequest('TestSwf.swf');
var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, function(e:Event) 
{
    var byteArray:ByteArray = cast(e.target, URLLoader).data;
    trace(['ByteArray length', byteArray.length]);  
    trace(byteArray.length);

    var slide_swf:SWF = new SWF (byteArray);
    trace(slide_swf.hasSymbol("__ASSET__assets_img_0002_png"));
    var sym:Dynamic = slide_swf.data.getCharacter(slide_swf.symbols.get("__ASSET__assets_img_0002_png"));
    trace(sym);

    var bmpd:BitmapData = slide_swf.getBitmapData("__ASSET__assets_img_0002_png");
    trace(bmpd);
    var bmp:Bitmap = new Bitmap(bmpd);
    trace(bmp.width);
    this.addChild(bmp);
});
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(req);

运行它的输出是:

Main.hx:42: [ByteArray length,738913]
Main.hx:43: 738913
Main.hx:46: true
Main.hx:48: [00:DefineBitsJPEG2] ID: 1002, Type: PNG, BitmapLength: 531065
Main.hx:50: null
Main.hx:57: 0

您可以看到 sym 类型是 DefineBitsJPEG2,SWF 无法将其转换为位图。

那么如何从 SWF 文件中提取资源呢?还是我以完全错误的方式解决这个问题?

任何帮助将不胜感激!!

4

1 回答 1

0

我不确定你是怎么做到的,但是你把 PNG 放在 DefineBitsJPEG 标记中,这是没有意义的,因为有 DefineBitsLossless 和 DefineBitsLossless2 标记。我不能确定它是否在 Flash 的所有情况下都无效,但我几乎完全确定这是你的问题的原因。

有一点可能是openfl实现中的一个错误,它使DefineBitsJPEG脱离了DefineBitsLossless,但我建议你先尝试修复你的一面,只有在它不起作用并且你完全没有的情况下才检查openfl源确保您有正确的标签。

于 2014-05-21T13:39:41.490 回答