如何使用SW3的屏幕截图并使用AS3将其下载到用户的桌面?

时间:2009-09-03 21:29:48

标签: actionscript-3 screenshot bitmapdata

有谁知道如何使用屏幕截图并将其下载到AS3中的桌面?我知道Mario Klingemann有a great BitmapDataExporter in AS2但它在AS3中不起作用。

3 个答案:

答案 0 :(得分:2)

您可以使用draw方法在BitmapData对象中绘制任何DisplayObject。但是,您无法绘制阶段或根应用程序类(安全性错误),因此您必须将应用程序包含在主Sprite中,然后将其添加到此阶段。

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核心库提供的编码器。

A3CoreLibs on Google Code

在这个例子中,AMFPHP用于将bitmapdata保存到服务器并返回agaib,它应该是一个很好的跳跃点,但你也可以查看发送多部分表单数据。

Sephiroth AMFPHP Tutorial

答案 1 :(得分:2)

除了其他答案之外,请注意Flash Player 10可以直接在用户的HD上保存文件,而无需将其发送到服务器...请参阅FileReference.save()

答案 2 :(得分: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's corelib,并且有great tutorials的负载。