Screenshots mit Adobe AIR erstellen
Mithilfe der Adobe AIR API und der JPGEncoder Klasse (enthalten in as3corelib) können Sie einen Screenshot Ihrer Applikation als JPG-Datei speichern.
“Echte Screenshots” zu machen, verbieten die Sicherheitsrichtlinien der Adobe AIR Runtime von Haus aus. Dies funktioniert nur auf Umwegen, aber nicht direkt mit Adobe AIR. Zwar könnte man meinen, dass man diese Sicherheitsrichtlinie umgehen kann indem man ein Applikationsfenster transparent bzw. halbtransparent einstellt und dann einen Screenshots erstellt, aber anstatt des durchscheinenden Desktops erhält man lediglich weiße Pixels.
Der nachfolgende Code zeigt, wie einfach Sie einen Screenshot Ihres Applikationsfensters, mitsamt den darin enthaltenen Elementen, als JPG-Datei speichern können.
AIR_Screenshot_Beispiel.mxml:
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()"><mx:Script> <![CDATA[ import mx.core.Window; import mx.controls.Alert; import flash.display.Bitmap; import com.adobe.images.JPGEncoder; import flash.filesystem.*; private var imageFile:File; private var fileStream:FileStream; private function init():void { imageFile = File.desktopDirectory.resolvePath("Screenshot.jpg"); fileStream = new FileStream(); fileStream.addEventListener(Event.CLOSE, completeHandler); fileStream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function snagPic():void { var bitmapData:BitmapData = new BitmapData(this.width, this.height); bitmapData.draw(this.stage,new Matrix()); var bitmap : Bitmap = new Bitmap(bitmapData); var jpg:JPGEncoder = new JPGEncoder(100); var ba:ByteArray = jpg.encode(bitmapData); fileStream.openAsync(imageFile, FileMode.WRITE); fileStream.writeBytes(ba); fileStream.close(); } private function completeHandler(event:Event):void { Alert.show("Pfad:n" + imageFile.nativePath, "Screenshot gespeichert!"); } private function errorHandler(event:IOErrorEvent):void { Alert.show(event.text, "Fehler!"); } ]]> </mx:Script><mx:Button x="10" y="10" id="btn" label="Screenshot erstellen" click="snagPic()"/>
</mx:WindowedApplication>
Selbstverständlich können Sie diesen Quellcode, als Flex Import downloaden.
AIR_Screenshot_Beispiel.zip
Weiterführende Weblinks:


Stephan Raabe
Hallo,
ist es möchl diese Funktionalität auch mit Javascript zu realisieren?
Wir setzen AIR zurzeit hauptsächlich mit dem ExtJS Framework (http://www.extjs.com) ein und erstellen damit B2B Anwendungen. Das Framework basiert auf Javascript.
Grüße,
Stephan Raabe
Januar 10th, 2009 at 13:44BMo
Hi,
März 17th, 2009 at 22:53vielen Dank für die super Beschriebung.
Ich hab versucht so mit dem HTMLLoader Internetseiten Screenshots zu erstellen.
Das geht wunderbar. Leider funktioniert es nicht, wenn ich dabei eine PDF Datei öffne. Die Screenshots von diesem integrierten PlugIn sind nur grau.
Was kann man da tun?
Grüße