0

我目前有一个 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);
}
?>
4

3 回答 3

0

}我立即注意到的一件事是,您的最后一个for语句中没有闭括号。这是复制粘贴错误吗?

于 2012-05-20T20:42:17.313 回答
0

http://code.google.com/p/in-spirit/wiki/MultipartURLLoader

注意这个链接。它允许每个请求上传多个图像。

================

用法:

http://blog.inspirit.ru/?p=139

于 2012-05-20T21:38:59.980 回答
0

虽然自从你问到现在已经很久了:只需将 i 的初始值更改为 0 和 eve

于 2014-02-01T13:08:02.417 回答