現在、ユーザーがコンテンツを描画できるスケッチパッドで構成されるフラッシュ(AS3)プロジェクトがあります。この描画コンテンツを一連のjpegスクリーンショットとして記録したいので、描画領域の横に「記録」ボタンと「停止」ボタンを配置しました。私は以下を達成するために以下のコードを取得しようとしています:
1)「record」を押すと、15枚のスクリーンショット(ビットマップ)がキャプチャされ、「jpgSource」配列に最大1分間保存されます。
2)「停止」を押すと、スクリーンショットを撮る機能が停止し、jpgSourceに保存されているすべてのビットマップがjpegに変換され、すべてのjpegがphpハンドラーにエクスポートされます。
現在、このコードを実行すると、phpコードは1つのjpeg画像(最後に取得した画像)のみを吐き出します。誰かが私がどこで間違っているのか指摘してくれたら、私は信じられないほど感謝しています。
編集:NavigateToUrlはフレームごとに1回しか機能しないことを発見しました。これは、私が遭遇し続けるエラーを説明しています。ここ(http://www.actionscript.org/forums/showthread.php3?t=250594)で、タイマーを使用してこの問題を回避できることを読みましたが、この場合の実装方法がよくわかりません。いつものように、アドバイスをいただければ幸いです。
var sourceArray:Array = [];
var myTimer:Timer = new Timer(50,200);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void {
var jpgSource:BitmapData = new BitmapData (850, stage.height);
jpgSource.draw(stage);
sourceArray.push(jpgSource);
}
recordbutton.addEventListener(MouseEvent.CLICK, recordbuttonClick);
stopbutton.addEventListener(MouseEvent.CLICK, stopbuttonClick);
function recordbuttonClick(ev:MouseEvent):void
{
myTimer.start();
}
function stopbuttonClick(ev:MouseEvent):void
{
myTimer.stop();
var jpgEncoder:JPGEncoder = new JPGEncoder(50);
for (var i:Number=1; i<sourceArray.length; i++){
var jpgStream:ByteArray = jpgEncoder.encode(sourceArray[i]);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("imageprocess.php?name=drawing.jpg");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
navigateToURL(jpgURLRequest, "blank");
}
PHP:
<?php
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] ) && isset ( $_GET['name'] ) ) {
//the image file name
$fileName = time();
// get the binary stream
$im = $GLOBALS["HTTP_RAW_POST_DATA"];
//write it
$fp = fopen($fileName, 'wb');
fwrite($fp, $im);
fclose($fp);
}
?>