1

スクリーンショットを取得してAS3のデスクトップにダウンロードする方法を知っている人はいますか?Mario KlingenmanによるAS2には素晴らしいBitmapDataExporterがあることは知っていますが、AS3では機能しません。

4

3 に答える 3

2

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のコアライブラリに付属しているエンコーダーを使用できます。

GoogleCodeのA3CoreLibs

この例では、AMFPHPを使用して、ビットマップデータをサーバーにラウンドトリップしてagaibに戻します。これは、適切な出発点として機能するはずですが、マルチパートフォームデータの送信を調べることもできます。

セフィロスAMFPHPチュートリアル

于 2009-09-03T22:53:44.920 に答える
2

他の回答に加えて、Flash Player 10 は、ファイルをサーバーに送信することなく、ユーザーの HD にファイルを直接保存できることに注意してください... FileReference.save()を参照してください。

于 2009-09-04T07:29:13.327 に答える
1

あなたはこれを試すことができます:

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を使用することもでき、そこにはすばらしいチュートリアルがたくさんあります。

于 2009-09-03T22:53:12.580 に答える