bit.draw(stage,shiftOrigin)适用于Flash Player,但不适用于浏览器;

时间:2012-02-15 02:52:23

标签: flash actionscript-3

我这里有一个代码,应该将阶段保存到文件中,但是当我单击运行在浏览器上具有此代码的函数的按钮时,它不起作用。询问保存位置的窗口未显示。

private function cropAndSave():void
{
    var file:FileReference = new FileReference();
    var bit:BitmapData = new  BitmapData(bm.width, bm.height);

    var jpgEncoder:JPGEncoder = new JPGEncoder(95);
    var shiftOrigin:Matrix = new Matrix();

    var now:Date = new Date();
    var outputFileName:String = now.getTime()+"_scrapeenet";

    outputFileName += ".jpg";

    shiftOrigin.translate(-bm.x,-bm.y);
    bit.draw(stage, shiftOrigin);

    file.save(jpgEncoder.encode(bit),outputFileName);
}

在Flash Player上它可以工作。 如果我将“stage”更改为某个movieclip名称,它也可以工作。但我需要保存所有舞台,而不仅仅是一个动画片段。

这可能是一个错误。

有什么方法可以解决吗?

1 个答案:

答案 0 :(得分:1)

AS3参考文档对flash.net.FileReference说:

  

FileReference.upload(),FileReference.download(),FileReference.load()和 FileReference.save()函数是非阻塞的。在文件传输完成之前,这些函数在调用后返回。此外,如果FileReference对象超出范围,则在离开作用域时,该对象上尚未完成的任何事务都将被取消。确保FileReference对象保持在范围内,只要上传,下载,加载或保存预计将继续。

看起来您的FileReference对象立即超出范围,可能会自动取消您的文件保存。此外,文档说明:

  

在Flash Player中,您只能成功调用此方法以响应用户事件(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法会导致Flash Player抛出Error异常。

您的粘贴代码不会因MouseEvent或KeyboardEvent而显示此操作,因此目前尚不清楚您是否根据用户操作进行操作。