BitmapDataをBase64変換-1
技術的な確認のための習作です。
確認したかったのは、SWFで生成されたBitmapDataを共有オブジェクトでローカルに保持出来るかどうかでした。結果としてはもちろん出来ましたね。[PNGEncoder.as, Base64.as を利用]
ペンで適当に描いてから、saveでローカルに、loadで呼び出します。saveしたものはリロードしてもloadで呼び出せます。
※save時に書き込むデータの容量についての注意がでるはずですが、気にしない方のみ。
[swf w=550 h=400]http://www.beelab.jp/wordPress/wp-content/uploads/2008/09/pencil.swf[/swf]
[sourcecode language=”actionscript3″]
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);
}
[/sourcecode]
かなり適当。