将自定义动画片段保存为本地磁盘(diy生成器)

时间:2014-01-31 08:45:15

标签: actionscript-3 flash

dropbox.com/s/77euop1luqjreos/FINAL.fla

好吧,我已经放弃了这个。我想不出任何保存用户创建的图像的方法。很难解释,但请查看我工作的fla文件。基本上它是一个diy发电机。唯一缺少的是保存功能。我已经读过文件引用但它总是在文档类中。我的代码在时间轴中。请帮助我真的卡住了。

编辑:我有一个现在正在运行的下载按钮!但它只保存了一小部分的动画片段:Imgur

1 个答案:

答案 0 :(得分:4)

要创建图像,您需要访问 MovieClip 对象的像素数据。可以通过将 MovieClip 渲染到 BitmapData 对象中来获取数据,并使用此数据,您可以编写自己的编码器将其转换为您想要的任何图像格式。编写这样的编码器不是一项简单的任务,需要了解图像格式算法,或者您可以使用预先编写的库。您可以下载 PNGEncoder JPGEncoder ,这是开源项目库as3corelib的一部分。

使用 JPGEncoder ,我们可以将 DisplayObject 转换为 ByteArray ,适合保存到文件中。如果使用 JPGEncoder ,它将如下所示:

import com.adobe.images.JPGEncoder;
var jpgEncoder:JPGEncoder = new JPGEncoder(quality);
//remember bitmapData here is just an example (do not try to compile this code without declare this particular variable)
var byteArray:ByteArray = jpgEncoder.encode(bitmapData);

使用 PNGEncoder ,它看起来像这样:

import com.adobe.images.PNGEncoder;
//remember bitmapData here is just an example (do not try to compile this code without declare this particular variable)
var byteArray:ByteArray = PNGEncoder.encode(bitmapData);

保存到用户的硬盘

使用 FileReference .save()函数,我们可以提示用户使用以下调用保存文件。

var fileReference:FileReference=new FileReference();
//in case of JPGEncoder
fileReference.save(byteArray, ".jpg");

将两者结合起来,下面是一个如何使用的例子:

//remember to import
import flash.net.FileReference;
import com.adobe.images.JPGEncoder; //or import com.adobe.images.PNGEncoder;
import flash.utils.ByteArray;
import flash.display.BitmapData;

//where mc_canvas will be your MovieClip instance name
var bitmapData:BitmapData = new BitmapData(mc_canvas.width, mc_canvas.height);
bitmapData.draw(mc_canvas);  

var jpgEncoder:JPGEncoder = new JPGEncoder(quality_slider.value);
var byteArray:ByteArray = jpgEncoder.encode(bitmapData);

//if you want to use PNGEncoder 
//var byteArray:ByteArray = PNGEncoder.encode(bitmapData);

var fileReference:FileReference = new FileReference();
fileReference.save(byteArray, ".jpg");