How to split animated gif in .net?

How do you split an animated GIF into its component parts in .net?

In particular, I want to load them into an image (System.Drawing.Image) in memory.

========================

Based on SLaks answer I now have this

public static IEnumerable<Bitmap> GetImages(Stream stream) { using (var gifImage = Image.FromStream(stream)) { //gets the GUID var dimension = new FrameDimension(gifImage.FrameDimensionsList[0]); //total frames in the animation var frameCount = gifImage.GetFrameCount(dimension); for (var index = 0; index < frameCount; index++) { //find the frame gifImage.SelectActiveFrame(dimension, index); //return a copy of it yield return (Bitmap) gifImage.Clone(); } } } 
+5
image file-format gif image-manipulation
source share
4 answers

Use the SelectActiveFrame method to select the active frame of an Image instance with an animated GIF. For example:

 image.SelectActiveFrame(FrameDimension.Time, frameIndex); 

To get the number of frames, call GetFrameCount(FrameDimension.Time)

If you just want to play the animation, you can put it in a PictureBox or use the ImageAnimator class.

+4
source share
 // Parses individual Bitmap frames from a multi-frame Bitmap into an array of Bitmaps private Bitmap[] ParseFrames(Bitmap Animation) { // Get the number of animation frames to copy into a Bitmap array int Length = Animation.GetFrameCount(FrameDimension.Time); // Allocate a Bitmap array to hold individual frames from the animation Bitmap[] Frames = new Bitmap[Length]; // Copy the animation Bitmap frames into the Bitmap array for (int Index = 0; Index < Length; Index++) { // Set the current frame within the animation to be copied into the Bitmap array element Animation.SelectActiveFrame(FrameDimension.Time, Index); // Create a new Bitmap element within the Bitmap array in which to copy the next frame Frames[Index] = new Bitmap(Animation.Size.Width, Animation.Size.Height); // Copy the current animation frame into the new Bitmap array element Graphics.FromImage(Frames[Index]).DrawImage(Animation, new Point(0, 0)); } // Return the array of Bitmap frames return Frames; } 
+2
source share

Half-communication, in WPF you have BitmapDecoders that will provide you with all the image frames.

See BitmapDecoder.Create and BitmapDecoder.Frames .

0
source share
 Image img = Image.FromFile(@"D:\images\zebra.gif"); //retrieving 1st frame img.SelectActiveFrame(new FrameDimension(img.FrameDimensionsList[0]), 1); pictureBox1.Image = new Bitmap(img); 
0
source share

All Articles