如何在 .net 中将动态gif图拆分成其组成部分?
具体而言,我想将它们加载到内存中的 Image(s) (System.Drawing.Image)。
======================
根据 SLaks 的答案,我现在有了以下代码:
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();
}
}
}
C##
编写)比Clone()
方法更具优势,因为Clone()
方法会为每一帧复制整个动画,从而使存储所有帧所需的内存量增加了平方倍数(例如,Clone()
方法产生一个动画数组,其中每个副本都有不同的当前帧)。为了真正分解动画帧,每个帧都需要在数组中绘制成自己的Bitmap
。根据需要,一旦将动画解析为帧数组,就可以将其处理掉以进行垃圾回收... - Neoheurist