画面のスクリーンショットをとるAirツールがいっぱいありますが、
あれどうやってるだろう?って思ったら結構簡単だったので。
ソースはこんなかんじ。
private function saveScreenshot(myHtml:HTML):void { var myScreenshotData:BitmapData; myScreenshotData = new BitmapData(myHtml.htmlLoader.contentWidth,myHtml.htmlLoader.contentHeight); myScreenshotData.draw(myHtml); //引数のオブジェクトのスクリーンショットを作成 var pngEnc:PNGEncoder = new PNGEncoder(); var pngBta:ByteArray = pngEnc.encode(myScreenshotData); //取得したスクリーンショットをPNGに var saveFile:File = myUploadDir.resolvePath(String("test.png")); var fs:FileStream = new FileStream(); fs.open(saveFile,FileMode.WRITE); fs.writeBytes(pngBta,0,pngBta.length); //PNGファイルを書き込む fs.close(); }
ためしに mx:HTML でやってみました。
mx:HTML にhtmlを読み込んで、それをBitmapData.draw() で変換し、
あとはそれをpngにエンコードして保存するだけ。
実際は mx:HTML をリサイズできるようにして、
それに合わせて取得できるようにすれば、あの枠だけ表示させて
それをドラッグして大きさを決めてスクリーンショット
ってやつができるはずです。
ちなみにサイズを指定が
myScreenshotData = new BitmapData(myHtml.htmlLoader.contentWidth,myHtml.htmlLoader.contentHeight);
となっていますが、これはスクロールして一番最後までいったとこまで取得するために、こうしてます。
htmlLoader.contentWidth と htmlLoader.contentHeight はHTMLの高さです。
これを普通に myHtml.width myHtml.height にすれば今表示されてる部分だけになります。
ちなみに contentHeight は2880 なので、それ以上の横幅、高さをもつHTMLの場合は
切れてしまいます。