Est-ce que quelqu'un sait comment prendre un screencap et le télécharger sur le bureau dans AS3? Je sais qu'il y a a great BitmapDataExporter in AS2 par Mario Klingenman mais ça ne marche pas dans AS3.Comment prendre un screencap d'un fichier SWF et le télécharger sur le bureau de l'utilisateur avec AS3?
Répondre
Vous pouvez essayer ceci:
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>
En outre, vous pouvez utiliser Adobe's corelib qui a un codeur JPEG, et il y a des tas de great tutorials là-bas.
Vous pouvez dessiner n'importe quel objet DisplayObject dans un objet BitmapData à l'aide de la méthode draw. Cependant, vous ne pouvez pas dessiner la scène ou la classe d'application racine (erreur de sécurité), vous devez donc contenir votre application dans un sprite maître qui est ensuite ajouté à cette étape.
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;
}
Une fois que vous avez votre BitmapData vous devez sérialiser à un ByteArray il peut donc être envoyée en utilisant un URLLoader. Pour vous sérialiser, vous avez besoin du JpegEncoder fourni avec le Flex SDK ou vous pouvez utiliser l'encodeur fourni avec les bibliothèques principales d'Adobe.
Dans cet exemple AMFPHP est utilisé pour sauver voyage aller-retour BitmapData à un serveur et à l'arrière agaib, il devrait servir de bon point de chute pour vous, mais vous pouvez aussi regarder en envoyer le formulaire en plusieurs parties Les données.
En plus des autres réponses, notez que Flash Player 10 peut enregistrer directement un fichier sur le HD de l'utilisateur, sans qu'il soit nécessaire de l'envoyer au serveur ... voir FileReference.save()
Le tutoriel vous avez lié pour m'aider beaucoup. Merci beaucoup! – picardo