我尝试使用“ExternalInterface.call()”来调用一个返回画布内容的javascript函数。然而,对于一个相对较小的画布(256x256),这非常慢(大约2秒),似乎是由于参数/返回值的编组。即使我像Brad Neuberg在早期帖子中建议的那样将画布数据分解成较小的块,http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html,我仍然得到了较差的性能。无论如何,自Flash 9以来,块的大小都不应该是问题。
我想我还可以尝试覆盖执行参数编组/评估的Flash javascript函数,但这似乎非常复杂,我想知道是否有更简单的方法,在尝试之前先了解一下。
我也尝试过通过以下方式进行flash和javascript通信:
我想我还可以尝试覆盖执行参数编组/评估的Flash javascript函数,但这似乎非常复杂,我想知道是否有更简单的方法,在尝试之前先了解一下。
我也尝试过通过以下方式进行flash和javascript通信:
var req : URLRequest = new URLRequest("javascript:getImage()");
var loader : Loader = new Loader();
loader.load(req);
其中"getImage()"是JavaScript函数,返回画布内容的图像。但是这会引发一些安全性违规错误,因为没有浏览器脚本允许用作目标URL,除非使用"navigateToURL()"而不是"Loader.load()"函数。不幸的是,前者不返回任何值。
我也看到一些旧代码使用"com.macromedia.javascript.JavaScriptProxy"类,但我没有测试过它,而且在Flash 11中似乎不可用。
任何想法将不胜感激。谢谢!
canvas.toDataURL('image/png')
非常高效地完成。与将图像数据作为像素或字节数组传递并在客户端上每个像素调用__flash__toXML()相比,这种方法提高了数倍的性能。也许我应该把这个作为答案发布出来,不确定,我是SO的新手。 - elyuro