スクリーンショットを取得してAS3のデスクトップにダウンロードする方法を知っている人はいますか?Mario KlingenmanによるAS2には素晴らしいBitmapDataExporterがあることは知っていますが、AS3では機能しません。
3 に答える
drawメソッドを使用して、BitmapDataオブジェクト内の任意のDisplayObjectを描画できます。ただし、ステージまたはルートアプリケーションクラス(セキュリティエラー)を描画することはできないため、このステージに追加されるマスタースプライト内にアプリケーションを含める必要があります。
public function createSnapShot(displayObject:DisplayObject):BitmapData
{
var nWidth:Number = displayObject.width;
var nHeight:Number = displayObject.height;
var bmd:BitmapData = new BitmapData(nWidth, nHeight, true, 0x00000000);
bmd.draw(displayObject);
return bmd;
}
BitmapDataを取得したら、それをByteArrayにシリアル化して、URLLoaderを使用して送信できるようにする必要があります。シリアル化するには、Flex SDKに含まれているJpegEncoderが必要であるか、adobeのコアライブラリに付属しているエンコーダーを使用できます。
この例では、AMFPHPを使用して、ビットマップデータをサーバーにラウンドトリップしてagaibに戻します。これは、適切な出発点として機能するはずですが、マルチパートフォームデータの送信を調べることもできます。
他の回答に加えて、Flash Player 10 は、ファイルをサーバーに送信することなく、ユーザーの HD にファイルを直接保存できることに注意してください... FileReference.save()を参照してください。
あなたはこれを試すことができます:
var bitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,0x000000);
bitmapData.draw(workspace);
var byteArray:ByteArray = bitmapData;
var request:URLRequest = new URLRequest ( 'yourserver/save.php' );
var loader: URLLoader = new URLLoader();
request.contentType = 'application/octet-stream';
request.method = URLRequestMethod.POST;
request.data = byteArray;
loader.load( request );
//and save.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>save</title>
</head>
<body>
<?php
$fp = fopen( 'file.txt', 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
echo "result: " + $fp;
?>
</body>
</html>
また、JPEGエンコーダーを備えたAdobeのcorelibを使用することもでき、そこにはすばらしいチュートリアルがたくさんあります。