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

如何在C#中显示GIF图像的特定帧?,c#,image,winforms,gif,animated-gif,C#,Image,Winforms,Gif,Animated Gif,我想显示一帧gif图像。我搜索并发现下面的代码应该可以工作,但它不工作。它可以正确检测帧数,但显示gif的整个帧,而不是指定的帧。谢谢大家 Image[] frames = new Image[36]; Image GG = Image.FromFile(@"C:\Users\Administrator\TEST C#\TEST2frame2\chef.gif"); FrameDimension dimension = new FrameDimension(GG.FrameDimensionsL

我想显示一帧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;
}

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

我能够复制相同的问题。事实上,整个动画gif将显示,而不是单个帧。如果你找到了解决方案,请为社区利益张贴。亲爱的阿里,巴乌朋友的回答对我来说确实有用。我很感激你。从你的回答中,我知道活动框架方法是如何工作的。你的回答对我很有帮助。谢谢。@MTK谢谢你的客气话。请不要忘记勾选答案分数()下方的绿色标志,将答案标记为已接受。