Search code examples
.netimageimage-manipulationfile-formatgif

How to split an animated gif in .net?


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

Specifically I want to load them into Image(s) (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();
        }
    }
}

Solution

  • Use the SelectActiveFrame method to select the active frame of an Image instance holding 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 into a PictureBox or use the ImageAnimator class.