在C#中编辑GIF

Jas*_*zak 6 c# animation gif frame

如何获得GIF动画的持续时间(播放时间)?

这是我的代码:

GifTime = PoczatkowyGIF.GetFrameCount(FrameDimension.Time); 
//GifTime is a double; PoczatkowyGIF is my gif image.
Run Code Online (Sandbox Code Playgroud)

GifTime不准确.我的动画是3.8s,但是GifTime3.9s.我尝试的另一个动画是0.88秒,但是GifTime为0.那么如何获得动画时间呢?另外,如何编辑GIF的第一帧时间并将指定时间的帧添加到现有GIF?

ist*_*iuk 5

在下面的代码段中,您可以看到如何计算总持续时间,累计每个帧的持续时间:

for (int f = 0; f < frameCount; f++)
{
  this_delay = BitConverter.ToInt32(image.GetPropertyItem(20736).Value, index) * 10;
  // Minimum delay is 100 ms
  delay += (this_delay < 100 ? 100 : this_delay);  
  index += 4;
}
Run Code Online (Sandbox Code Playgroud)

请注意,帧持续时间不能短于100毫秒,这可能会影响您的计算差异.

您可以阅读有关检查.GIF的这篇文章,您可以在其中找到其余代码.

此外,要编辑动画图像的最后一帧,您可以使用

gifImage.SelectActiveFrame(dimension, first_frame_index);
Run Code Online (Sandbox Code Playgroud)

SelectActiveFrame 将允许您编辑图像,更改指定的(在您的情况下首先)框架.

我对此并不完全确定,但框架不支持添加帧,我使用MagickNet为此目的重新编码新的GIF.您可能还想看看NGif作为替代方案.