我正在尝试将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文件中提取资产呢? 或者我是以完全错误的方式解决这个问题?
非常感谢任何帮助!!
答案 0 :(得分:0)
我不确定你是怎么做到的,但是你把PNG放在DefineBitsJPEG标签中,这没有任何意义,因为有了DefineBitsLossless和DefineBitsLossless2标签。我无法确定它是否在闪存的每种情况下都无效,但我几乎完全确定这是您遇到问题的原因。
这很可能是openfl实现中的一个错误,它使DefineBitsJPEG超出了DefineBitsLossless,但是我建议你先尝试修复你的方面并检查openfl来源,只要它没有。锻炼,你完全确定你有正确的标签。