Кто-нибудь знает, как сделать скринкап и загрузить его на рабочий стол в AS3? Я знаю, что есть a great BitmapDataExporter in AS2 от Mario Klingenman, но он не работает в AS3.Как сделать screencap SWF и загрузить его на рабочий стол пользователя с AS3?
ответ
Вы можете попробовать это:
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>
Кроме того, вы можете использовать Adobe's corelib, который имеет кодер JPEG, и есть грузы great tutorials там.
Вы можете нарисовать любой объект DisplayObject в объекте BitmapData, используя метод draw. Однако вы не можете нарисовать сцену или класс корневого приложения (ошибка безопасности), поэтому вы должны содержать ваше приложение внутри мастер-спрайта, который затем добавляется на этот этап.
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. Для Serialize вам нужен JpegEncoder, который включен в Flex SDK, или вы можете использовать кодировщик, снабженный основными библиотеками Adobe.
В этом примере AMFPHP используется туда и обратно спасительной BitmapData на сервер и обратно agaib, он должен служить хорошим спрыгнуть точкой для вас, но вы также можете посмотреть в отправить форму из нескольких частей данные.
В дополнение к другим ответам, обратите внимание, что Flash Player 10 можно сразу сохранить файл на HD пользователя, без необходимости отправки его на сервер ... см FileReference.save()
В учебнике вы связали, что мне очень помогли. Большое спасибо! – picardo