Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 10h36   #1
Membre Expert
 
Avatar de Pill_S
 
Homme Sébastien Piller
Consultant informatique
Inscription : janvier 2004
Messages : 1 618
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Piller
Âge : 28
Localisation : Suisse

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 618
Points : 1 981
Points : 1 981
Envoyer un message via MSN à Pill_S
Par défaut Upload de capture d'écran

Bonjour à tous,

je cherche à faire quelque chose de simple, mais je ne vois pas trop quelles classes utiliser...

J'aimerais à certains moments, effectuer un capture d'écran de l'application et l'uploader sur le serveur (en mode silencieux, sans action de l'utilisateur).

Voilà ce que j'ai pour l'instant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
        var bmp :BitmapData = new BitmapData(Application.application.width, Application.application.height, false);
        bmp.draw(Application.application as IBitmapDrawable); 
 
        var postVariables:URLVariables = new URLVariables;
        postVariables.unevar= "foo";
 
        var req:URLRequest = new URLRequest;
        req.url = uploadURL;
        req.method = URLRequestMethod.POST;
        req.data = postVariables;
 
        var fr:FileReference = new FileReference();
        fr.browse();
Mon problème est à la dernière ligne... Je ne veux pas faire sélectionner un fichier à l'utilisateur, je voudrais juste uploader les bytes du bitmap vers le serveur...

Une idée ?

__________________
gg
Pill_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 05h41   #2
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
voici la fonction que j'utilise pour ceci, ca devrait te donner la bonne direction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
        private function sauverEnvoyerPng():void{
					var bmpData:BitmapData = new BitmapData(application.width,application.height);
					bmpData.draw(application as IBitmapDrawable);
					var pngEnc:PNGEncoder = new PNGEncoder();
					var bytes:ByteArray = pngEnc.encode(bmpData);
					var b64Enc:Base64Encoder = new Base64Encoder();
					b64Enc.encodeBytes(bytes);
					var b64Data:String = b64Enc.flush();
 
					var url:String = "http://localhost/_Flex3/mes_tests/__sortie__/script/amfphp_19/gateway.php";
					var png_retour:Function = function(tb:*):void{
						if( tb[0] === false ){
							Alert.show(tb[2], tb[1]);
						}else{
							Alert.show(tb[2], tb[1]);
						}
					}
					var png_erreur:Function = function(e:*):void{
						Alert.show(e,'Erreur : Remoting.Images.png()');
					}
					var edata:Edata = new Edata(url);
					edata.appeler("Images.png", png_retour, png_erreur, b64Data, "dest_"+getTimer()+".png");					
        }
et voici une version allégée de la classe Images qui recoit les données ainsi que la fonction PNG :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Images{
 
	public function Images(){
	}
 
 
	/**
	* @desc Stocker un PNG
	*
	* @param $data Les données du PNG sous forme de ByteArray ou de String base64
	* @param $fichier Le nom du fichier 
	*
	* @return Array
	*/
	public function png($data, $fichier){
			$op = @fopen('test.txt', 'w');
			fwrite($op, gettype($data)."\n".$data);
			fclose($op);
		if( !$data ){
			return array(false, 'Erreur : PNG', 'l\'argument $data n\'est pas défini');
		}
		if( !$fichier ){
			return array(false, 'Erreur : PNG', 'l\'argument $fichier n\'est pas défini');
		}
		$op = @fopen($fichier, 'wb');
		if( !$op ){
			return array(false, 'Erreur : PNG', 'Impossible de créer le fichier de stockage');
		}
		if( is_string($data) ){
			$data = base64_decode($data);
		}else{
			// is_binary (ByteArray)
			$data = join('', $data);
		}
		if( !@fwrite($op, $data) ){
			return array(false, 'Erreur : PNG', 'Impossible d\'écrire les données dans le fichier de stockage');
		}
		@fclose($op);
		return array(true, 'PNG', 'sauvegarde réussi');
	}
 
}
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 09h02   #3
Membre Expert
 
Avatar de Pill_S
 
Homme Sébastien Piller
Consultant informatique
Inscription : janvier 2004
Messages : 1 618
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Piller
Âge : 28
Localisation : Suisse

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 618
Points : 1 981
Points : 1 981
Envoyer un message via MSN à Pill_S
Merci.

Au final, c'est aussi la moyen que j'ai décidé d'utiliser (un peu différement). J'encode également les données en Base64, puis je les envoie via un HTTPService.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<mx:HTTPService id="uploadImage" useProxy="false" method="POST" url="http://path/to/my/jsp" invoke="onUploadInvoke(event)" fault="onUploadFault(event)" result="onUploadResult(event)" />
...
    var bmp :BitmapData = new BitmapData(container.width, container.height, false);
        bmp.draw(container);
 
        var jpgBytes:ByteArray = new JPEGEncoder().encode(bmp);
 
        var b64e:Base64Encoder = new Base64Encoder();
        b64e.encodeBytes(jpgBytes, 0, jpgBytes.length);
        var encoded:String = b64e.toString();         
 
        var  o:Object = new Object;
        o.myvar = encoded;        
        uploadImage.send(o);
... car j'ai beau cherche, je ne trouve pas de classe EData dans Flex!


__________________
gg
Pill_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 21h12   #4
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
la classe EDATA est juste une classe perso mis en place pour me faciliter la vie avec REMOTING
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h16.


 
 
 
 
Partenaires

Hébergement Web