将movieClip保存为磁盘中的swf,然后再次读取

时间:2011-08-20 21:17:41

标签: flex actionscript-3 air bytearray

我几乎在整个互联网上看到了几乎所有相关主题。而我仍然困惑.. 我正在使用绘图应用程序(flex / air),

1- where user loads image file,(bitmapdata > bitmap > movieclip base layer)
2- add layer ( new sprite > movieclip "second object in display list")
3- draw on this sprite ( graphics.draw circle / etc, lot of other details etc)
4- usr can add more layers etc, name layers etc ... all sprites are of same size as bitmap

Q1。现在我想将这个主要的movieClip(UIComponent的一部分)保存为swf文件。这样用户可以再次阅读并继续工作。就像我用photoshop做的那样。

评论:我知道这听起来过于通用,要问这么详细的事情。所以请耐心等待.. 我一直在使用byteArray。和Air File对象,flash.net.fileReference等... Q2。 (主要问题),我不想将绘制的精灵转换为bitmapdata然后再进行bytearray。 (在我看来)它会将所有内容转换为像素,这是我不想要的。 Q3。是否有一些自动神奇的线,它会做所有的事情...(保存绘制的矢量/形状)精灵,因为?? (减少机会)。如果我可以读取swf作为movieClip,我可以检查精灵的图层和其他所有...问题是将其作为swf文件写入磁盘。

请分享您的想法,并随时指导所有可能的方向.. 提前感谢您宝贵的时间..

3 个答案:

答案 0 :(得分:1)

在一个理想的世界里,你只会写作 YourByteArray.writeObject(YourCanvasSprite); 但这不起作用,因为序列化仅适用于可读写(和公共)的数据。因此,您需要重新创建图形。您可以通过使用IGraphics(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/IGraphicsData.html)来简化它,因为这些应该可以序列化。因此,如果您继承Sprite并存储“绘图命令”和参数,并让对象具有恢复功能,则应该可以将其保存到byteArray。虽然它远不是单行,但可能比制作和阅读SVG更容易一些。

答案 1 :(得分:0)

我认为这个问题最干净的解决方案是使用SVG(可能是EPS)。我不熟悉任何将绘制的矢量对象转换为SVG的库,但由于SVG只是一个XML文件,因此您可以研究SVG架构并创建自己的:W3C - Scalable Vector Graphics (SVG) 1.1 (Second Edition)。以下开源项目可以帮助您编写一个,也可以用于将SVG读入Flash:New Flex and Flash SVGWeb Components

如你所提到的,解决这个问题的一个不太干净,也许更复杂的方法可能是编写你自己的SWF。为了做到这一点,你必须在运行时生成.swf文件,你可以通过使用NativeProcess传递参数(即包含绘图信息的ActionScript文件,带有名称的子图层等)到MXMLC来完成。来自Flex SDK。

答案 2 :(得分:0)

我发现这两个答案都很有用。随着时间的推移,我意识到在这两种情况下,它可能比我能处理的工作更多。同时,我也正在测试其他像素基数的方法。所以我终于决定通过像素方式。用户可以将图层保存为具有透明度的png文件。

如果有人(其他读者)来这篇文章,我想快速结束,我找到了非常有价值的绘图库,名为“涂鸦”as3。它几乎完成了80%的事情,我希望这样做。所以我正在使用它并根据我的需要调整它。非常感谢和尊重所有从他们宝贵的时间回复的伟大人物。