BitmapDataをBase64変換-1
技術的な確認のための習作です。
確認したかったのは、SWFで生成されたBitmapDataを共有オブジェクトでローカルに保持出来るかどうかでした。結果としてはもちろん出来ましたね。[PNGEncoder.as, Base64.as を利用]
ペンで適当に描いてから、saveでローカルに、loadで呼び出します。saveしたものはリロードしてもloadで呼び出せます。
※save時に書き込むデータの容量についての注意がでるはずですが、気にしない方のみ。
public function saveDraw(event:Event):void { canvasW = canvas.width; canvasH = canvas.height; my_so=SharedObject.getLocal("superfoo"); var image:ByteArray = encodeDisplay(canvas); var imageString:String = Base64.encodeByteArray(image); my_so.data.canvasData=imageString; my_so.data.canvasW=canvasW; my_so.data.canvasH=canvasH; my_so.flush(); } public function loadDraw(event:Event):void { my_so=SharedObject.getLocal("superfoo"); canvasW=my_so.data.canvasW; canvasH=my_so.data.canvasH; canvasData=new BitmapData(canvasW, canvasH); var dx=(stage.stageWidth-canvasW) / 2; var dy=(stage.stageHeight-canvasH) / 2; var decoded:String=my_so.data.canvasData; var decodedBytes:ByteArray = Base64.decodeToByteArray(decoded); var rect:Rectangle = new Rectangle(dx, dy, canvasW, canvasH); canvasData.setPixels(rect, decodedBytes); var bmp=new Bitmap(canvasData); if (transcript == null) { transcript=new Sprite ; transcript.x=dx; transcript.y=dy; addChild(transcript); setChildIndex(transcript,0); } transcript.addChild(bmp); }
かなり適当。