有谁知道如何在 AS3 中截屏并将其下载到桌面?我知道马里奥·克林根曼 (Mario Klingenman ) 在 AS2 中有一个很棒的 BitmapDataExporter,但它在 AS3 中不起作用。
问问题
473 次
3 回答
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 核心库提供的编码器。
在此示例中,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 回答