我已經創建了一個可以使用as3繪圖API繪製形狀的應用程序。現在我想將這些繪圖保存到本地磁盤,然後稍後打開文件進行進一步編輯。如何將由as3繪圖API創建的圖形保存到本地磁盤,然後重新打開它
我該怎麼做?將繪製的對象轉換爲位圖將做到這一點?如果我將我的電影剪輯轉換爲位圖,我會失去任何質量或某些東西...?或者有什麼其他的方式去做我想做的事情。
另外我不想將圖形轉換爲JPEG或任何其他圖像格式。
感謝提前:)
我已經創建了一個可以使用as3繪圖API繪製形狀的應用程序。現在我想將這些繪圖保存到本地磁盤,然後稍後打開文件進行進一步編輯。如何將由as3繪圖API創建的圖形保存到本地磁盤,然後重新打開它
我該怎麼做?將繪製的對象轉換爲位圖將做到這一點?如果我將我的電影剪輯轉換爲位圖,我會失去任何質量或某些東西...?或者有什麼其他的方式去做我想做的事情。
另外我不想將圖形轉換爲JPEG或任何其他圖像格式。
感謝提前:)
看一看readGraphicsData():
在Flash Player 11.6和Adobe AIR 3.6和更高版本可以使用 Graphics類的readGraphicsData()方法來獲得表示顯示對象的矢量圖形內容的數據。 這可用於創建圖形的快照以保存,複製, 運行時創建spritesheet等。
調用readGraphicsData()方法返回包含IGraphicsData對象的Vector實例 。這些是用於繪製具有drawGraphicsData()方法的矢量圖形的相同對象。
來源:http://help.adobe.com/en_US/as3/dev/WS749610B4-4709-4f75-BBA0-650BF52623CA.html
這裏是readGraphicsData()和drawGraphicsData()的文檔。
您還可以看到一個例子,在這裏它的一些討論:http://www.bytearray.org/?p=5013
謝謝噸... :) 我認爲這會做...特別是在bytearray.org的例子鏈接正是我正在尋找....我想我可以將它保存爲bytearray或其他東西,然後重新打開它。 – Aditya 2013-05-13 06:05:41
下面是如何保存的形狀數據,並載入它的工作示例
把它縮短I」 m使用SharedObject,但使用FileStream.writeObject
而不是SharedObject的過程相同。
//These are all the classes potentially used by Graphics:
import flash.display.GraphicsBitmapFill;
import flash.display.IGraphicsData;
import flash.geom.Matrix;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.utils.ByteArray;
import flash.geom.ColorTransform;
import flash.filters.BitmapFilter;
import flash.geom.Vector3D;
import flash.display.GraphicsEndFill;
import flash.display.GraphicsGradientFill;
import flash.display.GraphicsPath;
import flash.display.GraphicsShaderFill;
import flash.display.Shader;
import flash.display.ShaderData;
import flash.display.GraphicsSolidFill;
import flash.display.GraphicsStroke;
import flash.display.GraphicsTrianglePath;
//an object to draw to:
var mySprite:Sprite = new Sprite();
addChild(mySprite);
//to automatically serialize the graphics, we need to register all classes involved
registerClassAlias("flash.display.IGraphicsData", IGraphicsData);
registerClassAlias("flash.display.GraphicsBitmapFill", GraphicsBitmapFill);
registerClassAlias("flash.geom.Matrix", Matrix);
registerClassAlias("flash.display.BitmapData", BitmapData);
registerClassAlias("flash.geom.Rectangle", Rectangle);
registerClassAlias("flash.geom.Point", Point);
registerClassAlias("flash.utils.ByteArray", ByteArray);
registerClassAlias("flash.geom.ColorTransform", ColorTransform);
registerClassAlias("flash.filters.BitmapFilter", BitmapFilter);
registerClassAlias("flash.geom.Vector3D", Vector3D);
registerClassAlias("flash.display.GraphicsEndFill", GraphicsEndFill);
registerClassAlias("flash.display.GraphicsGradientFill", GraphicsGradientFill);
registerClassAlias("flash.display.GraphicsPath", GraphicsPath);
registerClassAlias("flash.display.GraphicsShaderFill", GraphicsShaderFill);
registerClassAlias("flash.display.Shader", Shader);
registerClassAlias("flash.display.ShaderData", ShaderData);
registerClassAlias("flash.display.GraphicsSolidFill", GraphicsSolidFill);
registerClassAlias("flash.display.GraphicsStroke", GraphicsStroke);
registerClassAlias("flash.display.GraphicsTrianglePath", GraphicsTrianglePath);
//shared object to use
var so:SharedObject = SharedObject.getLocal("myShapes");
//check if the shared object already has data
if (so.data && so.data.shapes) {
try{
//load the existing shape data into our sprite
mySprite.graphics.drawGraphicsData(so.data.shapes);
}catch(err){
trace(err.toString());
}
}
stage.addEventListener(MouseEvent.CLICK, clicky);
function clicky(e:Event):void {
//let's draw a random circle
mySprite.graphics.beginFill(0xFFFFFF * Math.random(), Math.random());
mySprite.graphics.drawCircle(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, Math.random() * 500);
mySprite.graphics.endFill();
//let's update the shared object to reflect our updated graphics
so.data.shapes = mySprite.graphics.readGraphicsData();
so.flush();
}
酷!手工完成比絕對更好。 – Cameron 2016-01-29 22:33:02
AS3繪圖API是基於矢量的。位圖是特定分辨率的光柵化圖像(您永遠無法編輯它們)。您必須跟蹤您對繪圖API所做的調用,保存該信息,然後稍後加載並重做從保存的數據中指定的API調用。 – Cameron 2013-05-11 19:35:57
@Cameron - 有一個更簡單的方法,請參閱我的答案。 – BadFeelingAboutThis 2016-01-29 19:00:37