如何在 C# 中显示 GIF 图像的特定帧?

How to show a specific frame of a GIF image in C#?

我想显示一帧 gif 图片。搜索了一下,发现下面的代码应该可以,但是不行。它正确检测到帧数,但它显示 gif 的整个帧而不是指定的帧。谢谢大家

Image[] frames = new Image[36];
Image GG = Image.FromFile(@"C:\Users\Administrator\TEST C#\TEST2frame2\chef.gif");
FrameDimension dimension = new FrameDimension(GG.FrameDimensionsList[0]);
            // Number of frames
int frameCount = GG.GetFrameCount(dimension);
label1.Text = frameCount.ToString();

            // Return an Image at a certain index
GG.SelectActiveFrame(dimension, 1);
frames[1] = ((Image)GG.Clone());
pictureBox1.Image = frames[1];

在调用 SelectActiveFrame() 之前使用您自己的代码,然后更改为以下行:

frames[0] = new Bitmap(GG);
pictureBox1.Image = frame[0];

这应该可以解决问题。请不要忘记处理创建的图像。

哦,它有效,但不像你期望的那样。

当您设置 gif 图像的活动帧时,它实际上会从该帧重新开始动画。例如,您必须在更改框架时通过将 pictureBox.IsEnabled 设置为 false 来停止它。试试下面的代码

private Image img;

public Form1()
{
    InitializeComponent();
    img = Image.FromFile(@"C:\Users\Administrator\TEST C#\TEST2frame2\chef.gif");
    pictureBox1.Image = img;
}

private void button1_Click(object sender, EventArgs e)
{
    var dim = new FrameDimension(img.FrameDimensionsList[0]);
    img.SelectActiveFrame(dim, 1);
    pictureBox1.Enabled = false;
}

尝试在不同时刻按下按钮,您会看到活动图像框会发生变化。