我想从一个(任何)外部swf文件捕获一个静帧,通过使用我自己的Flash电影作为代理来加载它并将有关舞台的信息放到JavaScript上。我想尽可能保持它的兼容性,所以我现在就使用AS2/Flash 8。从外部swf导出框架到Javascript
该脚本正常工作在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",flash2canvasScreenshot.getPixel(w, 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);
你试过像'ExternalInterface.call(“sendToJS”,“42”);',以确保您的JS正在显示数据正确吗? – kolufild
@kolufild是的,尝试了类似的东西,它正在接收数据。 – Niklas
如果这是所有的代码,那么'h'是'undefined'。 – Joe