begin process at 2012 02 04 12:36:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > [AIR] ENREGISTRER LOCALEMENT UNE IMAGE CRÉÉE DYNAMIQUEMENT

[AIR] ENREGISTRER LOCALEMENT UNE IMAGE CRÉÉE DYNAMIQUEMENT


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ActionScripts Classé sous :air, enregistrement, local, applicationDirectory, applicationStorageDirectory Niveau :Initié Date de création :07/02/2009 Date de mise à jour :07/02/2009 23:26:25 Vu / téléchargé :4 751 / 254

Auteur : WhiteMagus

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Suite au problème soulevé dans la source précédente (CLASSE PNGENCODER par Blacknight) sur l'enregistrement en local d'une image générée à la volée et encodée en PNG, je me suis penché sur le problème avec l'aide du cookbook de Adobe pour AIR (lien dispo dans la conclusion).

Cette astuce est très utile, c'est pour ça que je l'ai pas laissé en commentaire, et que j'ai posté une source exprès.

Dans la source je décris les deux dossiers en rapport avec l'application :

* applicationStorageDirectory : qui renvoie à un dossier dans AppData pour Windows et dans la Bibliothèque pour Mac.
Attention ! : ce dossier n'est pas supprimé avec la désinstallation AIR (sur Mac en tout cas), donc à utiliser avec modération.

* applicationDirectory : qui renvoie au dossier où est situé le .exe pour Windows (typiquement C:/Program Files/Mon Application) et au dossier monApplication.app/Contents/Resources/ pour Mac.

A noter : dans les deux cas un Loader fonctionne avec le même URL car les fichiers sont organisés de la même façon, relativement au SWF.

A noter bis : Il est aussi possible d'enregistrer les données dans un dossier crypté (Encrypted Local Store), pour une sécurité maximale. Il paraît qu'il ne faut cependant pas dépasser les 10 Mo, car après les performances sont altérées.
Ce n'est pas la même méthode, il sera bon de faire une autre source :)
Vous avez cependant le descriptif du cookbook dans la conclusion



J'ai modifié le ciblage du dossier et de l'image suivant les consignes de Pegase. En effet, c'est beaucoup plus simple et cela permet de cibler le dossier sans le créer pour tester notamment, comme il l'explique si le fichier existe.

Source

  • import PNGEncoder;
  • /**** AFFICHAGE DE L'IMAGE PAR BLACKNIGHT : (cf source précédene) ****/
  • var myPicture:BitmapData=new BitmapData(100,100,true,0x00000000);
  • for (var i:int=0; i<100; i++) {
  • myPicture.fillRect(new Rectangle(100*Math.random(),100*Math.random(),10*Math.random(),10*Math.random()),0xFFFFFFFF*Math.random());
  • }
  • var image:Bitmap = new Bitmap(myPicture);
  • addChild(image);
  • image.x = 70;
  • image.y = 15;
  • /**** VARIABLES ****/
  • // dossier de l'application dans les dossiers "système"
  • var dossier:File = File.applicationStorageDirectory;
  • /******************* /!\ /!\ /!\ /!\/!\ ********************
  • File.applicationStorageDirectory renvoit au dossier de "configuration" de l'application.
  • Ce dossier est situé dans AppData/Roaming/com.adobe.example.VOTREPROJET pour Vista
  • et dans Bibliothèque > Préférences > com.adobe.example.VOTREPROJET Pour les macs
  • Pour enregistrer dans le dossier de l'application, il faut utiliser >>> File.applicationDirectory <<<
  • Ça enregistre dans le dossier de l'application sous Windows (genre C:/Program Files/Mon App/)
  • et DANS le .app sous mac (dans monApp.app/Contents/Resources/)
  • Dans n'importe quel cas les loader fonctionnent car sous Windows c'est le exe qui charge
  • et pour les macs c'est le main.swf contenu dans monApp.app/Contents/Resources/ qui charge.
  • ***********************************************************/
  • // image finale dans l'ordi
  • var imageEnregistree:File = dossier.resolvePath("enregistrees/image.png");
  • // les variables de dossiers ont été changées suite au commentaire de Pegase. Déjà c'est plus simple, plus explicite, et en plus, on pourra faire des tests plus tard sur ce chemin ciblé
  • /****** ENREGISTREMENT *******/
  • function enregistrerFct (evt:Event) {
  • // On encode en PNG
  • var monPNGByte:ByteArray = PNGEncoder.encode(myPicture);
  • // on ouvre le filestream pour écrire (en l'occurence) sur l'ordi
  • var stream:FileStream = new FileStream();
  • // on ECRIT sur l'emplacement de l'image défini plus haut
  • stream.open(imageEnregistree, FileMode.WRITE);
  • // on écrit quoi ? Le bytearray bien sûr :)
  • stream.writeBytes(monPNGByte);
  • // Et on ferme la porte pour éviter les courants d'air
  • stream.close();
  • confEnregistrement.text = "Enregistrée sous "+imageEnregistree.url;
  • }
  • enregistrer.addEventListener(MouseEvent.CLICK, enregistrerFct);
  • /***** REAFFICHAGE ******/
  • // Là, rien de bien sorcier... Le loader fonctionne...
  • function afficherFct (evt:Event) {
  • if(imageEnregistree.exists) {
  • var chargeur:Loader = new Loader();
  • chargeur.load(new URLRequest(imageEnregistree.url));
  • addChild(chargeur);
  • chargeur.x = 86;
  • chargeur.y = 270;
  • }
  • }
  • charger.addEventListener(MouseEvent.CLICK, afficherFct);
import PNGEncoder;

/**** AFFICHAGE DE L'IMAGE PAR BLACKNIGHT : (cf source précédene) ****/

var myPicture:BitmapData=new BitmapData(100,100,true,0x00000000);

for (var i:int=0; i<100; i++) {
	myPicture.fillRect(new Rectangle(100*Math.random(),100*Math.random(),10*Math.random(),10*Math.random()),0xFFFFFFFF*Math.random());
}

var image:Bitmap = new Bitmap(myPicture);

addChild(image);

image.x = 70;
image.y = 15;


/**** VARIABLES ****/



// dossier de l'application dans les dossiers "système"
var dossier:File = File.applicationStorageDirectory;

/******************* /!\ /!\ /!\ /!\/!\ ********************

File.applicationStorageDirectory renvoit au dossier de "configuration" de l'application.

Ce dossier est situé dans AppData/Roaming/com.adobe.example.VOTREPROJET pour Vista
et dans Bibliothèque > Préférences > com.adobe.example.VOTREPROJET Pour les macs



Pour enregistrer dans le dossier de l'application, il faut utiliser >>> File.applicationDirectory <<<

Ça enregistre dans le dossier de l'application sous Windows (genre C:/Program Files/Mon App/)
et DANS le .app sous mac (dans monApp.app/Contents/Resources/)

Dans n'importe quel cas les loader fonctionnent car sous Windows c'est le exe qui charge
et pour les macs c'est le main.swf contenu dans monApp.app/Contents/Resources/ qui charge.

***********************************************************/

// image finale dans l'ordi
var imageEnregistree:File = dossier.resolvePath("enregistrees/image.png");


// les variables de dossiers ont été changées suite au commentaire de Pegase. Déjà c'est plus simple, plus explicite, et en plus, on pourra faire des tests plus tard sur ce chemin ciblé


/****** ENREGISTREMENT *******/

function enregistrerFct (evt:Event) {
	
	// On encode en PNG
	var monPNGByte:ByteArray = PNGEncoder.encode(myPicture);
	
	// on ouvre le filestream pour écrire (en l'occurence) sur l'ordi
	var stream:FileStream = new FileStream();
	
	// on ECRIT sur l'emplacement de l'image défini plus haut
	stream.open(imageEnregistree, FileMode.WRITE);
	
	// on écrit quoi ? Le bytearray bien sûr :)
	stream.writeBytes(monPNGByte);
	
	// Et on ferme la porte pour éviter les courants d'air
	stream.close();
	
	confEnregistrement.text = "Enregistrée sous "+imageEnregistree.url;
	
}
enregistrer.addEventListener(MouseEvent.CLICK, enregistrerFct);


/***** REAFFICHAGE ******/

// Là, rien de bien sorcier... Le loader fonctionne...

function afficherFct (evt:Event) {
	
	if(imageEnregistree.exists) {
		
		var chargeur:Loader = new Loader();
		chargeur.load(new URLRequest(imageEnregistree.url));
		
		addChild(chargeur);
		
		chargeur.x = 86;
		chargeur.y = 270;
		
	}
	
}

charger.addEventListener(MouseEvent.CLICK, afficherFct);

 Conclusion

Adobe AIR Cookbook Beta : http://www.adobe.com/cfusion/communityengine/index .cfm?event=homepage&productId=4

Adobe AIR cookbook beta - Safeguarding Files with the Encrypted Local Store : http://www.adobe.com/cfusion/communityengine/index .cfm?event=showdetails&postid=10463&loc=en_US&prod uctid=4

Voilà, première source AIR, non ?

PS. : désolé pour le design quelque peu rudimentaire, mais j'ai posté pour le code seulement.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • PNGEncoder.asTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 222 octets
  • sauvegardeLocale.airTélécharger ce fichier [Réservé aux membres club]50 360 octets
  • sauvegardeLocale.flaTélécharger ce fichier [Réservé aux membres club]1 035 776 octets

Télécharger le zip


 Historique

07 février 2009 22:15:50 :
Correction d'une coquille...
07 février 2009 22:22:10 :
Ah, là, là... J'avais pas vu que sous windows on voyait aussi le swf quand on installait le AIR, donc j'enlève un chapitre qui sert à rien
07 février 2009 22:24:57 :
Une précision apportée par Blacknight : le SWF est aussi visible sous Windows, j'ai donc modifié un paragraphe
07 février 2009 22:31:43 :
Euh... Le système de modification marche 1 fois sur 3... Donc recorrection des coquilles...
07 février 2009 23:26:25 :
Remplacé le ciblage par celui tel que décrit par Pegase

 Sources du même auteur

Source avec Zip Source avec une capture EDITEUR DE TEXTE

 Sources de la même categorie

Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture PARTICULE SYSTEM par yasdar
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML par yasdar
Source avec Zip Source avec une capture MP3 LAYER NICE &SMALL par yasdar

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLASSE LOCALCONNECTION : EXEMPLE D'UTILISATION AVEC UN JEU D... par bali_balo

Commentaires et avis

Commentaire de WhiteMagus le 07/02/2009 22:10:24

Raaah, j'ai du me connecter sur un PC pour envoyer ça !!!
Discrimination anti-Mac... :)

Commentaire de Blacknight91titi le 07/02/2009 22:25:24 10/10

Hello chers Ami,

Très bonne source, en effet la première exploitant AIR il me semble.
Il serait donc temps pour la communauté de Flashkod de passer définitivement à ActionScript 3 afin de constater son énorme potentiel !

Source compréhensible et correctement rédigé. Niveau Initié puisque utilisation de AIR (bien que...).

De bonne base pour la manipulation de fichier avec AIR.

Bravo !

Blacknight
Note : 10/10, rien à redire.

Commentaire de pegase31 le 07/02/2009 22:35:49 administrateur CS

à la place de :

var dossier:File = File.applicationStorageDirectory.resolvePath("enregistrees/");
var imageEnregistree:File = new File(dossier.nativePath+File.separator+"image.png");

il est plus correcte de mettre :

var dossier:File = File.applicationStorageDirectory;
var imageEnregistree:File = dossier.resolvePath("enregistrees/image.png");

Celà permet de savoir si le dossier existe déjà, par exemple, lors du post-traitement ... pour (encore par exemple) éviter les écrasements.

Peg' ;)

Ps: oui, AIR, j'en suis en train de faire le tour et j'ai déjà des astuces (merci EbarSoft)

Commentaire de pegase31 le 08/02/2009 03:58:57 administrateur CS

Double post (si, si, j'ai le droit ;) ) juste pour dire qu'il est maintenant possible d'enregistrer sur l'ordinateur local avec "FileRéférence.save()", dans cs4 (nouveauté !!!)

Seulement, on est obligé de passer par une boîte de dialogue pour laisser l'utilisateur le faire à sa guise ('faut pas pousser non plus). Donc enregistrer des fichiers sur l'ordi local via flash sur internet est maintenant possible !

Peg'

Commentaire de faiblard le 09/02/2009 09:09:29

Bonjour,

Après un rapide coup d'½il la source a l'air pas mal (je regarderai ce soir)

Mais c'est normal que peut de sources AIR ici car en principe le forum FLEX et la pour ça... (vu que c'est le forum FLEX & AIR :D)

Peut etre devrais tu la poster la bas aussi histoire que le forum ne meurent pas prématurément...

Commentaire de pegase31 le 09/02/2009 09:32:21 administrateur CS

Le problème c'est que le Fla c'est du Flash .. donc le mieux est de faire le AIR/Flash ici et le AIR/Flex sur le site prévu pour.

Flex est un langage à part, même s'il utilise de l'ActionScript, donc une source Flex ne pourra pas être lu par flash et l'inverse aussi. Même s'ils peuvent tout les deux faire du AIR au final.

Peg'

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

enregistrement de variables sur internet [ par AtomPouce ] Tout ce qui est petit est mignon .... J'en suis la preuve vivantesalutj aimerai créé un éditeur de nivo sur un de mes projets , et avec cet editeur , Pop qui marche en local mais pas sur le net [ par mysticjah ] Bonjour, Sur mon site j'ai créé plusieurs fenêtres pop-up qui fonctionnent en local mais lorsque je balance tout sur l eFTP les fenêtres en question n Enregistrement de données sans base de donnée dans un swf [ par MeTaLCaM ] Bonjour, en fait, je suis en train de créer un formulaire... Quand on valide les informations, celles-ci seraient enregistré directement dans le swf l prob de décalage du son entre swf local et swf en ligne [ par Mura ] bonjour,com le titre l indique, g un prob avec mon swf .... qd j exporte mon swf en local la bande son intégrée ds le flash est tip top en rapport ave une anim ok en local mais pas sur le web [ par tofem ] Bonsoir à tous,voilà un petit problème peut-être quelqu'un a-t-il la solution.il n'est pas encore vraiment question de php.voilà j'ai fait un swf qui enregistrement de modification dans frame [ par soleil1 ] bonjour j'ai vraiment besoin de votre aide, je dois passer d'un frame à un autre en enregistrant toutes les modifications faites sur le 1er(checkbox c Mon anim marche que en local ???? [ par Masterkix ] J'ai fait une Animation Flash destinée à être publiée sur mon site Web.Sur ma machine (c'est à dire en local) l'animation fonctionne parfaitement, par shared object [ par gouroutin ] Bonjour, j'ai un gros problème depuis quelques jours, et je ne trouve aucune réponse sur le web.Il se trouve que je suis entrain de développer un soft flash et le réseau local ? [ par deuval ] bonjour ! :)j'aimerai créer une animation flash pour créer un mini tchat hyper basic pour apprendre a faire dialoguer des animations flash via un rese Local Connection [ par Ragnar69 ] Salut every codeur !Petit problème:J'ai fait un site avec 2 frames différentes, sur chacune d'elle se trouve une anim flash et je les fais communiquer


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales