2009-09-03 5 views

Répondre

1

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.

+0

Le tutoriel vous avez lié pour m'aider beaucoup. Merci beaucoup! – picardo

2

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.

A3CoreLibs on Google Code

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.

Sephiroth AMFPHP Tutorial

+0

Dois-je envoyer le ByteArray au serveur pour l'enregistrer en tant que fichier? Qu'en est-il de l'utilisation de FileReference.save()? – picardo

+0

Peu importe. Je viens de réaliser que FileReference.save() ne fonctionne que dans Flash 10. – picardo

2

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()