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

3
我想展示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];

我能够复制相同的问题。实际上,整个动态gif图像被显示出来而不是单个帧。如果你找到了解决方案,请为社区的利益发布它。 - Ali
1
亲爱的阿里,Ba__friend的答案对我有效。 - GntS
2个回答

4

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

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

这应该就可以了。请不要忘记处理创建的图像。

3

哦,它能够工作,但不是你期望的那样。

当你设置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;
}

尝试在不同的时刻按下按钮,您会看到活动图像框将更改。

Janacek先生,非常感谢您。从您的回答中,我了解了活动帧方法的工作原理。您的回答对我很有帮助。谢谢。 - GntS
@MTK 谢谢您的赞美之词。请不要忘记通过勾选答案下方的绿色标志(<0>)将其标记为已接受的答案。 - Ondrej Janacek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接