Home Créer un PNG depuis AIR
Créer un PNG depuis AIR PDF Imprimer Envoyer

Vous possédez une application AIR depuis laquelle vous aimeriez créer un fichier PNG sur la machine de l'utilisateur. Voici un exemple où l'utilisateur drag & drop 2 occurrences sur la scène, puis il clique sur un bouton pour pouvoir générer un fichier PNG sur son ordinateur.

 

Remarque

Nous utiliserons la classe PNGEncoder.as trouvée à l'adresse  http://www.kaourantin.net/2005/10/png-encoder-in-as3.html. Vous pouvez aussi télécharger le fichier préparé en cliquant sur ce lien.

 

Avant de vous proposer le téléchargement complet de l'exemple (à travers un fichier .fla), voici le cœur du code.

 import PNGEncoder;

var dossier:File=File.desktopDirectory;
var empreinte:BitmapData;
var imageEnregistree:File;
var fluxDonnees:FileStream;
var monImageBrute:ByteArray;
var zoneTravail:Sprite = new Sprite();

// Code pour placer les deux occurrences de la scène, dans une sorte de "calque virtuel" intitulé "zoneTravail"

addChild(zoneTravail);
zoneTravail.addChild(btDavid);
zoneTravail.addChild(btCouverture);

//Coeur du code qui créer réellement l'image

btCreationFichier.addEventListener(MouseEvent.MOUSE_DOWN,creationFichier);
btCreationFichier.buttonMode = true
function creationFichier(evt:MouseEvent) {
    empreinte=new BitmapData(600,400)
    empreinte.draw(zoneTravail);// ou this au lieu de zoneTravail pour prendre la scène entière
    monImageBrute=PNGEncoder.encode(empreinte);
    fluxDonnees = new FileStream();
    imageEnregistree=dossier.resolvePath("DossierImagesCreees/"+nomFichier.text+".png");
    fluxDonnees.open(imageEnregistree, FileMode.WRITE);
    fluxDonnees.writeBytes(monImageBrute);
    fluxDonnees.close();
}

 

Nous déclarons les quelques variables dont nous allons avoir besoin puis nous appelons la fonction creationFichier qui exécute les actions suivantes :

1. Nous définissons une sorte d'empreinte de la zone à copier dans l'image.

empreinte=new BitmapData(600,400)
empreinte.draw(zoneTravail);

Remarque : Si vous souhaiter copier toute votre scène dans le fichier PNG, vous pouvez alors remplacer zoneTravail par this.

2. Vous encodez votre "empreinte".

monImageBrute=PNGEncoder.encode(empreinte);

3. Vous créez une flux de données qui va servir à transferer votre empreinte encodée dans le fichier spécifié.


fluxDonnees = new FileStream();
imageEnregistree=dossier.resolvePath("DossierImagesCreees/nomImage.png");
fluxDonnees.open(imageEnregistree, FileMode.WRITE);
fluxDonnees.writeBytes(monImageBrute);
fluxDonnees.close();

 

Dans notre exemple à télécharger, le nom de l'image (nomImage) est composé à partir d'un texte saisi par l'utilisateur.

Note : Les deux occurrences intitulées btDavid et btCouverture sont deux simples occurrences déjà présentes sur la scène.

 

Voici le script complet du FLA que nous vous proposons au téléchargement.

Téléchargement du .fla et de la classe.

 

import PNGEncoder;

var dossier:File=File.desktopDirectory;
var empreinte:BitmapData;
var imageEnregistree:File;
var fluxDonnees:FileStream;
var monImageBrute:ByteArray;
var zoneTravail:Sprite = new Sprite();

// Code pour placer les deux occurrences de la scène, dans une sorte de "calque virtuel" intitulé "zoneTravail"

addChild(zoneTravail);
zoneTravail.addChild(btDavid);
zoneTravail.addChild(btCouverture);

//Coeur du code qui créer réellement l'image

btCreationFichier.addEventListener(MouseEvent.MOUSE_DOWN,creationFichier);
btCreationFichier.buttonMode = true
function creationFichier(evt:MouseEvent) {
    empreinte=new BitmapData(600,400)
    empreinte.draw(zoneTravail);// ou this au lieu de zoneTravail pour prendre la scène entière
    monImageBrute=PNGEncoder.encode(empreinte);
    fluxDonnees = new FileStream();
    imageEnregistree=dossier.resolvePath("DossierImagesCreees/"+nomFichier.text+".png");
    fluxDonnees.open(imageEnregistree, FileMode.WRITE);
    fluxDonnees.writeBytes(monImageBrute);
    fluxDonnees.close();
}

// Code pour le drag & drop

zoneTravail.addEventListener(MouseEvent.MOUSE_DOWN,occurrencesMobiles);
function occurrencesMobiles(evt:MouseEvent) {
    evt.target.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP,relacherOccurrences);
}

function relacherOccurrences(evt:MouseEvent) {
    stopDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP,relacherOccurrences);
}

 

Mise à jour le Mardi, 13 Avril 2010 13:19
 
Yazo.net, Powered by Joomla!; Joomla templates by SG web hosting