我目前有一个 Flash (AS3) 项目,它由一个用户可以在其上绘制内容的画板组成。我想把这个绘制的内容记录为一系列的jpeg截图,并在绘图区域放置了一个“记录”和“停止”按钮。我正在尝试获取以下代码以实现以下目标:
1)按下“记录”时,应捕获15个屏幕截图(位图)并将其存储在“jpgSource”数组中最多一分钟。
2)当按下“停止”时,截图功能应该停止,所有存储在jpgSource中的位图都应该转换为jpegs,并且所有jpegs应该导出到一个php处理程序。
目前,当我运行此代码时,php 代码只吐出一个 jpeg 图像(最后一张)。如果有人能指出我哪里出错了,我将不胜感激。
编辑:我发现 NavigateToUrl 每帧只能运行一次,解释了我一直遇到的错误。我在这里(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);
}
?>