Certe volte può capitare di aver bisogno di salvare un’istantanea dello Stage su disco rigido. Non tutti i nostri utenti avranno la pazienza di fare il PrintScreen di tutto lo schermo, ritagliare la parte interessata e conservarla, vediamo come fornire loro uno strumento più comodo per compiere questa operazione.Con Flash Player 10 è possibile leggere e scrivere direttamente sul disco dell’utente, grazie all’utilissima Classe FileReference.
Prima di poterla salvare, però, abbiamo bisogno di creare un’istantanea dello Stage in qualche modo. Questo è un lavoro per la Classe BitmapData.
La classe BitmapData consente di eseguire operazioni con i dati (pixel) di un oggetto Bitmap. È possibile utilizzare i metodi della classe BitmapData per creare delle immagini bitmap trasparenti e opache con dimensioni arbitrarie e manipolarle in vari modi in fase di runtime.
Utilizzando questa Classe è molto facile creare una rappresentazione in Pixel dell’intero Stage, si fa in questo modo:
var bd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight); bd.draw(stage);
Con due sole righe abbiamo instanziato una BitmapData e abbiamo disegnato al suo interno l’intero contenuto dello Stage.
Adesso dobbiamo convertire le informazioni contenute all’interno della nostra BitmapData in un flusso Jpeg, in modo da poterlo salvare su disco. Per farlo ci serviremo della Libreria AS3corelib. Questa Libreria contiene numerose e utili Classi per manipolare i dati, la Classe che utilizzeremo per questo esempio si chiama com.adobe.images.JPGEncoder.
Una volta importata la Classe non ci rimane che utilizzare il suo Metodo encode per trasformare la nostra BitmapData in un flusso di informazioni Jpeg, in questo modo:
var ba:ByteArray = (new JPGEncoder()).encode(bd);
Adesso che abbiamo una Jpeg da salvare possiamo finalmente utilizzare un FileReference per salvare questa immagine sul disco, semplicemente aggiungendo un’unica riga:
(new FileReference()).save(ba,'printScreen.jpg');
Tutto qui, in sole quattro righe è stato possibile creare un’istantanea dello schermo, convertirla in Jpeg e salvarla su disco… Sole quattro righe:
var bd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight); bd.draw(stage); var ba:ByteArray = (new JPGEncoder()).encode(bd); (new FileReference()).save(ba,'printScreen.jpg');
Nella maggior parte dei casi basterà questo per permettere ai vostri utenti di salvare un’istantanea dell’SWF che stanno guardando, come nell’esempio che potete vedere qui sotto:
[kml_flashembed publishmethod=”dynamic” fversion=”10.0.0″ useexpressinstall=”true” movie=”https://www.danielealessandra.com/wp-content/uploads/2011/03/printScreen.swf” width=”480″ height=”400″ targetclass=”flashmovie”]
[/kml_flashembed]
Per avere qualcosa sullo Stage ho disegnato 10 cerchi. Spostate i cerchi con il Mouse e utilizzate il pulsante in alto a sinistra per salvare la Jpeg. Come sempre, i sorgenti sono a vostra disposizione per qualunque uso vogliate farne.
Puoi leggere l'informativa completa cliccando sul link Privacy Policy che trovi dovunque su questa pagina, e comunque visitando in qualsiasi momento l'indirizzo https://www.danielealessandra.com/privacy-policy/
5 replies on “Salvare un printScreen di un SWF”
HO BISOGNO DI AIUTO SEGUO LA TUA GUIDA E NON MI FUNZIONAA, IN PIU IL FILE FLA DEL DOWNLOAD NON SI APRE E NON POSSO VEDERE…
potresti gentilmente farmene uno semplice e me lo invii via mail.. vale46_d@libero.it conistruzioni e tutto grazie … sei la mia salvezza.. mica è xkè uso cs4?
Potresti gentilmente utilizzare la versione CS5 di Flash e utilizzare il file già allegato all’articolo?
Ti prego di non scrivere tutto maiuscolo, è assordante.
Per far funzionare il file FLA allegato ti serve almeno Flash CS5.
[…] […]