Flash: animierte GIFs laden

Normaler Weise wird beim Laden einer animierten GIF in Flash nur das erste Frame dargestellt.
Aber es gibt eine Klasse, die man dazu nutzen kann, um einen animierten Movie-Clip anhand der animierten GIF in Flash zu erzeugen. Leider fehlt der Klasse noch die Skalierbarkeit und der Status des Ladens des GIFs. Diese hab ich noch hinzugefügt. Im Complete-Event kann man mittles GIFresize(w,h) die Größe des GIFs einstellen. Und der handelsübliche ProgressEvent zeigt den Zustand des Ladens.

import org.bytearray.gif.player.GIFPlayer;
import org.bytearray.gif.decoder.GIFDecoder;
import org.bytearray.gif.events.GIFPlayerEvent;
import org.bytearray.gif.events.FileTypeEvent;
import org.bytearray.gif.events.FrameEvent;
import org.bytearray.gif.events.TimeoutEvent;

var myGIFPlayer:GIFPlayer = new GIFPlayer();
addChild ( myGIFPlayer );

myGIFPlayer.addEventListener ( IOErrorEvent.IO_ERROR, onIOError );
myGIFPlayer.addEventListener ( GIFPlayerEvent.COMPLETE, onCompleteGIFLoad );
myGIFPlayer.addEventListener ( FrameEvent.FRAME_RENDERED, onFrameRendered );
myGIFPlayer.addEventListener ( FileTypeEvent.INVALID, onInvalidFileLoaded );
myGIFPlayer.addEventListener ( TimeoutEvent.TIME_OUT, onTimeoutError );
myGIFPlayer.addEventListener ( ProgressEvent.PROGRESS, GIFonPROGRESS );
myGIFPlayer.load ( new URLRequest ("diego.gif") );

function GIFonPROGRESS ( pEvt:ProgressEvent ):void{
	//Math.round(100*pEvt.bytesLoaded/pEvt.bytesTotal)
}

function onTimeoutError ( pEvt:TimeoutEvent ):void{
	//Sorry, TIME_OUT error
}

function onInvalidFileLoaded ( pEvt:FileTypeEvent ):void{
	//Invalid file loaded !
}

function onIOError ( pEvt:IOErrorEvent ):void{
	//Sorry there was an error loading the GIF file
}

function onCompleteGIFLoad ( pEvt:GIFPlayerEvent ):void{
	myGIFPlayer.GIFresize(600,300);
}

function onFrameRendered ( pEvt:FrameEvent ):void{
	//Frame Width : pEvt.frame.bitmapData.width Frame Height :  pEvt.frame.bitmapData.height
	//Frame delay : pEvt.target.getDelay ( pEvt.target.currentFrame )
	//Current frame : pEvt.target.currentFrame
}
DOWNLOAD
Update:
Ich habe gerade eine andere Klasse ausprobiert. Diese ist noch besser geeignet für größere GIF’s. Aber diese Klasse besaß auch keine ResizeFunktion, welche man in meiner Version via myGIFPlayer.GIFresize(x, y); nutzen kann.
import flash.net.URLLoaderDataFormat;
import flash.net.URLLoader;
import flash.net.URLRequest;
import com.worlize.gif.GIFDecoder;
import com.worlize.gif.GIFPlayer;
import com.worlize.gif.events.AsyncDecodeErrorEvent;
import com.worlize.gif.events.GIFDecoderEvent;
import com.worlize.gif.events.GIFPlayerEvent;

var gifloader:URLLoader = new URLLoader();
var myGIFPlayer:GIFPlayer = new GIFPlayer();


try {
	gifloader.removeEventListener(Event.COMPLETE, gif_Loaded);	
	gifloader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, gif_httpStatus);
	gifloader.removeEventListener(Event.INIT, gif_init);
	gifloader.removeEventListener(IOErrorEvent.IO_ERROR, gif_ioError);
	gifloader.removeEventListener(Event.OPEN, gif_open);
	gifloader.removeEventListener(ProgressEvent.PROGRESS, gif_progress);
	gifloader.removeEventListener(Event.UNLOAD, gif_unLoad);
} catch (error:Error) {
	//
}


myGIFPlayer = new GIFPlayer();
myGIFPlayer.smoothing = false;
gifloader = new URLLoader();
gifloader.addEventListener(Event.COMPLETE, gif_Loaded);	
gifloader.addEventListener(HTTPStatusEvent.HTTP_STATUS, gif_httpStatus);
gifloader.addEventListener(Event.INIT, gif_init);
gifloader.addEventListener(IOErrorEvent.IO_ERROR, gif_ioError);
gifloader.addEventListener(Event.OPEN, gif_open);
gifloader.addEventListener(ProgressEvent.PROGRESS, gif_progress);
gifloader.addEventListener(Event.UNLOAD, gif_unLoad);
gifloader.dataFormat = URLLoaderDataFormat.BINARY;
gifloader.load(new URLRequest("htpp://mein.gif"));

function gif_httpStatus(e:HTTPStatusEvent):void {
	//trace("httpStatusHandler: " + e);
}
function gif_init(e:Event):void {
	//trace("initHandler: " + e);
}
function gif_ioError(e:IOErrorEvent):void {
	//trace("ioErrorHandler: " + e);
}
function gif_open(e:Event):void {
	//trace("openHandler: " + e);
}
function gif_progress(e:ProgressEvent):void {
	//trace("progressHandler: bytesLoaded=" + e.bytesLoaded + " bytesTotal=" + e.bytesTotal);
}
function gif_unLoad(e:Event):void {
	//trace("unLoadHandler: " + e);
}
function gif_Loaded(e:Event):void{
	myGIFPlayer.addEventListener(GIFPlayerEvent.COMPLETE, handleGifLoadComplete);
	myGIFPlayer.addEventListener(AsyncDecodeErrorEvent.ASYNC_DECODE_ERROR, handleAsyncDecodeErrorEvent);
	myGIFPlayer.addEventListener(GIFPlayerEvent.FRAME_RENDERED, handleFrameRendered);
	myGIFPlayer.loadBytes(e.target.data);
}

function handleAsyncDecodeErrorEvent(event:AsyncDecodeErrorEvent):void {
	//
}
			
function handleGifLoadComplete(event:GIFPlayerEvent):void {
	addChild(myGIFPlayer);
       myGIFPlayer.GIFresize(100, 100);
}
			
function handleFrameRendered(event:GIFPlayerEvent):void {
	//
}
DOWNLOAD
2016-10-13T13:11:57+00:00 Categories: Blog|Tags: |