2009-05-08 4 views
0

Ich frage mich, ob es überhaupt möglich ist, den Zustand eines SWF-Films über einen gewissen Zeitraum aufzuzeichnen/aufzuzeichnen und alles als JPG auf dem Server zu speichern?Animationssequenz aus Flash als JPEGs exportieren

AS3 hat die neue com.adobe.images.JPGEncoder Klasse, die den Job zu erledigen scheint, aber kann ich eine Sequenz erfassen? Die Hoffnung wäre, dass ich es als Video oder Animation zusammenstellen könnte.

Gibt es andere Möglichkeiten, SWF programmgesteuert auf Video zu codieren?

Antwort

1

Ich habe eine "Bildschirmaufnahme" gemacht, bevor ich den JPGEncoder benutze. Ich denke, Sie sollten den Bildschirm auf dem ENTER_FRAME Event erfassen können. Dies funktioniert möglicherweise nicht, da die JPG-Codierung nicht sehr schnell ist.

So würde ich es tun. Für Ihre Referenz, hier ist einige Code, der dies tut (für einen einzigen Screenshot):

var fileReference:FileReference = new FileReference(); 

// Capture the BitmapData of the stage for example 
var captureMovieClip:DisplayObjectContainer = stage; 

var stage_snapshot:BitmapData = new BitmapData(captureMovieClip.width, captureMovieClip.height); 
stage_snapshot.draw(captureMovieClip); 

// Setup the JPGEncoder, run the algorithm on the BitmapData, and retrieve the ByteArray 
var encoded_jpg:JPGEncoder = new JPGEncoder(100); 
var jpg_binary:ByteArray = encoded_jpg.encode(stage_snapshot); 

// save 
fileReference.save(jpg_binary, "screenshot.jpg"); 

Sie wahrscheinlich diese erweitern können, um in Ihrem ENTER_FRAME Event-Handler aufgerufen werden, und dann die Datei auf verschiedene Dateinamen speichern. Anstelle der Bühne können Sie auch ein anderes Anzeigeobjekt verwenden.

Ich weiß nicht, wie schnell das laufen wird, müssen Sie möglicherweise die Bildrate senken, so dass die ENTER_FRAME nicht so viel aufgerufen wird, aber Sie werden einige Qualität in Ihren JPG-Renderings verlieren.

Auch die Qualität in der Zeile: new JPGEncoder(100) von 100 auf einen niedrigeren Wert kann mit Dateigrößen der JPEGs helfen (aber möglicherweise mehr Overhead mit der Komprimierung oder nicht entstehen).