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();
}
}
}
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.