2009-10-07 7 views
2

J'essaie actuellement de faire fonctionner la fonction imageSnapshot en flex. J'ai regardé dur mais je ne peux pas sembler trouver une solution à mon problème. Je souhaite prendre une capture d'écran de l'un de mes composants, pour capturer la sortie finale de mon programme, car un simple "écran d'impression" coupe une partie de la sortie en raison du défilement. Mon code actuel ressemble -Flex 3 - Sauvegarde d'une image d'un composant

<mx:ApplicationControlBar dock="true"> 
    <mx:Button label="Take snapshot of Profile" 
     click="takeSnapshot();" /> 
</mx:ApplicationControlBar> 

qui, lorsqu'il est appelé fait -

private function takeSnapshot(even:Event=null):void { 
    var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(viewstack1); 

Maintenant, je pense que cela prend l'image du ViewStack que je veux ... Mais Im perplexe sur ce qu'il faut faire de ici! Est-ce qu'il n'est pas possible maintenant de simplement copier l'image dans le presse-papier, ou produire une nouvelle fenêtre dans mon navigateur avec l'image entière dedans? Si quelqu'un a un autre moyen de le faire, les suggestions seraient merveilleuses.

Nous vous remercions de votre temps.

Répondre

2

J'ai construit sur l'exemple d'Antti pour faire un composant de travail (avec le code complet), que vous pouvez voir here. Vous pouvez imprimer à peu près n'importe quel composant que vous aimez (j'ai une image et une grille de données là-bas).

Tout ce que vous devez ajouter au code de Antti est ceci:

var fr:FileReference = new FileReference(); 
var encoder:PNGEncoder = new PNGEncoder(); 

//Antti's code here 

fr.save(outputData,"datagrid.jpg"); 

qui ouvrira un fichier de sauvegarde de dialogue pour vous.

Cheers, Casp

4

Vous pouvez dessiner la vue dans un objet BitmapData et l'encoder en png en utilisant as3corelib. Quelque chose comme:

var screenshotData : BitmapData = new BitmapData(viewstack1.width, viewstack1.height, true, 0x00000000); 
screenshotData.draw(viewstack1); 
var outputData:ByteArray = PNGEncoder.encode(screenshotData); 
// Save outputData as a file to disk, send to webserver etc.. 

edit: Euh, cela vous rend encore plus confus. Désolé pour ça. ImageSnapshot possède une propriété appelée données, que je devine vous donne à peu près le même résultat que celui-ci. Vous pouvez l'enregistrer en tant que fichier sur disque en utilisant flash.net.FileReference

+0

j'ai essayé d'utiliser la méthode de sauvegarde flash.net.FileReference, mais ce ne est pas même la cueillette vers le haut. J'ai le FileRefence.upload et les options de téléchargement comme mentionné dans le lien, mais pas les .save ou .load. Im en utilisant Flex 3.4 ... désolé si Im négliger quelque chose de simple, vraiment nouveau pour cela. –

+0

Ok Ma propre faute idiote. J'ai réparé cela mais il n'a toujours pas fait ce que je voulais. C'est en faisant une photo, mais c'est seulement vraiment faire une image de l'écran que je peux voir, je voulais une image de l'ensemble du composant, même les parties coupées. Toute aide là-bas? –

+0

Si vous obtenez les paramètres width et height directement dans le constructeur de l'objet BitmapData, vous devriez obtenir le composant entier, même si vous ne pouvez pas tout voir. –

Questions connexes