将帧从外部swf导出到Javascript
我试图从(任何)外部swf文件中捕获一个静止帧,通过使用我自己的flash影片作为代理加载它并将关于舞台的信息传递到
javascript.我希望尽可能保持兼容,所以我现在使用AS2 / Flash 8.
该脚本在Flash调试器中工作正常,即 trace(flash2canvasScreenshot.getPixel(w,h).toString(16)); 返回正确的像素颜色,其中: ExternalInterface.call("sendToJS",flash2canvasScreenshot.getPixel(w,h).toString(16)); 在已发表的电影中没有. 对于大型闪存(尺寸方面)电影,这种方法显然可能非常慢,因为它迭代每个像素.如果有人有任何更好的方法,请随意分享,但正如所说,我面临的问题是我在调试和发布方面得到了不同的结果,在发布时没有获取像素信息. import flash.display.BitmapData; import flash.external.*; var myLoader:MovieClipLoader = new MovieClipLoader(); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { var stageW = Stage.width; var flash2canvasScreenshot:BitmapData = new BitmapData(stageW,Stage.height,false,0x00000000); var pixels:Array = new Array(); flash2canvasScreenshot.draw(element); for (w = 0; w <= stageW; w++) { trace(flash2canvasScreenshot.getPixel(w,h).toString(16)); // this gives correct color value for the pixels in the debugger ExternalInterface.call("sendToJS",h).toString(16)); // this just returns the bitmap default color,0 in this case. /* for (h = 0; h <= Stage.height; h++) { var pixel = flash2canvasScreenshot.getPixel(w,h).toString(16); pixels.push(pixel); } */ } //ExternalInterface.call("sendToJS",pixels.toString());*/ }; myLoader.addListener(mclListener); myLoader.loadClip("http://i.cdn.turner.com/cnn/cnnintl_adspaces/2.0/creatives/2010/6/9/21017300x250-03.swf",0); //myLoader.loadClip("https://s.ytimg.com/yt/swfbin/watch_as3-vflJjAza6.swf",0); //myLoader.loadClip(_level0.flash2canvasurl,_root.mc); 解决方法
您发布的代码段几乎没有问题:
>像乔伊提到的那个,但是从我的突出中脱颖而出的那个 这是一个有效的代码片段的简化版本(没有外部接口/像素值部分): var myLoader:MovieClipLoader = new MovieClipLoader(); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { var pixels:Array = new Array(); setTimeout(takeSnapshot,2000,target_mc); } myLoader.addListener(mclListener); myLoader.loadClip("http://www.bbc.co.uk/science/humanbody/sleep/sheep/reaction_version5.swf",1); //myLoader.loadClip("http://i.cdn.turner.com/cnn/cnnintl_adspaces/2.0/creatives/2010/6/9/21017300x250-03.swf",1); //myLoader.loadClip("https://s.ytimg.com/yt/swfbin/watch_as3-vflJjAza6.swf",0); function takeSnapshot(target:MovieClip):Void { var flash2canvasScreenshot:BitmapData = new BitmapData(150,150,0x00000000);//tiny sample flash2canvasScreenshot.draw(target); _level1._alpha = 20;//fade the loaded content _level0.attachBitmap(flash2canvasScreenshot,0);//show the snapshop. sorry about using _root } 这是150×150快照的快速缩放预览: 这是一个as3代码片段,用于说明安全沙箱处理问题: var swf:Loader = new Loader(); swf.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderComplete); swf.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,loaderSecurityError); swf.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loaderIOError); swf.load(new URLRequest("http://i.cdn.turner.com/cnn/cnnintl_adspaces/2.0/creatives/2010/6/9/21017300x250-03.swf"),new LoaderContext(true)); function loaderComplete(event:Event):void{ setTimeout(takeSWFSnapshot,2000); } function loaderSecurityError(event:SecurityErrorEvent):void { trace('caught security error',event.errorID,event.text); } function loaderIOError(event:IOErrorEvent):void{ trace('caught I/O error',event.text,'tattempting to loadt',swf.contentLoaderInfo.url); } function takeSWFSnapshot():void{ var clone:BitmapData = new BitmapData(swf.content.width,swf.content.height,0); try{ clone.draw(swf.content); }catch(e:SecurityError){ trace(e.name,e.message,e.getStackTrace()); } addChild(new Bitmap(clone)); } HTH (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |