private void init(Stream stream, GIFFrameUpdatedCallbackMethod frameUpdatedCallback) { // set gif frame update callback this.FrameUpdatedCallback = frameUpdatedCallback; // decode gif image var gifDecoder = new GifDecoder(); var image = new ExtendedImage(); gifDecoder.Decode(image, stream); // add frames and load unity textures frames = new List <TextureGIFFrame>(); var firstFrame = new TextureGIFFrame(createTexture(image.PixelWidth, image.PixelHeight, image.Pixels), TimeSpan.FromSeconds(image.DelayTime / 100d)); frames.Add(firstFrame); var lastFrame = firstFrame; foreach (var frame in image.Frames) { var newFrame = new TextureGIFFrame(createTexture(frame.PixelWidth, frame.PixelHeight, frame.Pixels), TimeSpan.FromSeconds(frame.DelayTime / 100d)); frames.Add(newFrame); if (lastFrame != null) { lastFrame.nextFrame = newFrame; } lastFrame = newFrame; } // set starting image CurrentFrame = frames[0]; lastFrame.nextFrame = firstFrame; }
/// <summary> /// Call to update gif animation /// </summary> public void Update() { var currentFrame = CurrentFrame.Update(); if (currentFrame != CurrentFrame && FrameUpdatedCallback != null) { CurrentFrame = currentFrame; FrameUpdatedCallback(currentFrame); } }
/// <summary> /// Used to update frame /// </summary> /// <returns>Next or Current frame</returns> public TextureGIFFrame Update() { if (FrameTime.TotalSeconds == 0) { return(this); } TextureGIFFrame currentFrame = this; time += Time.deltaTime; if (time >= FrameTime.TotalSeconds) { time = 0; currentFrame = NextFrame; } return(currentFrame); }
private void init(Stream stream, GIFFrameUpdatedCallbackMethod frameUpdatedCallback) { // set gif frame update callback this.FrameUpdatedCallback = frameUpdatedCallback; // decode gif image var gifDecoder = new GifDecoder(); var image = new ExtendedImage(); gifDecoder.Decode(image, stream); // add frames and load unity textures frames = new List<TextureGIFFrame>(); var firstFrame = new TextureGIFFrame(createTexture(image.PixelWidth, image.PixelHeight, image.Pixels), TimeSpan.FromSeconds(image.DelayTime / 100d)); frames.Add(firstFrame); var lastFrame = firstFrame; foreach (var frame in image.Frames) { var newFrame = new TextureGIFFrame(createTexture(frame.PixelWidth, frame.PixelHeight, frame.Pixels), TimeSpan.FromSeconds(frame.DelayTime / 100d)); frames.Add(newFrame); if (lastFrame != null) lastFrame.nextFrame = newFrame; lastFrame = newFrame; } // set starting image CurrentFrame = frames[0]; lastFrame.nextFrame = firstFrame; }