画面のスクリーンショットをとる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の場合は
切れてしまいます。