带有动画 GIF 的 C# PictureBox 跳过帧

C# PictureBox with animated GIF skips Frames

我有一个问题,我在 PictureBox 控件中用作图像值的动画 gif 显示速度比在资源管理器中显示速度慢。

我正在使用 C# Winforms。

这里的问题应该是执行时跳过了一些帧

有人可以确认这个问题并且可能有解决方案吗?

我的图片框用于预加载并在后台线程中完全工作。

是否可以从 gif 中逐一读取 Frames 并将其动画化为 picturebox?

谢谢!

使用此代码。 由于每秒显示25帧,我把定时器设置为40,也就是每40毫秒一帧。 (1000ms / 25 frames = 40ms)

第 1 步。此方法显示如何使用

static Image[] images;
int frameCount = 0;
private void Btn_Click(object sender, EventArgs e)
{  
    //get gif image
    object ezgif_com_video_to_gif = Resources.ResourceManager.GetObject("ezgif_com_video_to_gif");
    images = getFrames((Image)ezgif_com_video_to_gif);//convert to frames array

    //show frames
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Interval = 40;
    timer.Elapsed += Timer_Elapsed;
    timer.Start();
}

步骤 2. 添加计时器滴答声

private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    pictureBox1.Image = images[frameCount];
    frameCount++;
    if (frameCount > images.Length - 1)
        frameCount = 0;
}

步骤 3. 将 gif 转换为帧

Image[] getFrames(Image originalImg)
{
    int numberOfFrames = originalImg.GetFrameCount(FrameDimension.Time);
    Image[] frames = new Image[numberOfFrames];

    for (int i = 0; i < numberOfFrames; i++)
    {
        originalImg.SelectActiveFrame(FrameDimension.Time, i);
        frames[i] = ((Image)originalImg.Clone());
    }

    return frames;
}