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

时间:2015-01-10 08:36:25

标签: 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.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];

2 个答案:

答案 0 :(得分:4)

使用您自己的代码,直到调用SelectActiveFrame()并在此之后更改为以下行:

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

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

答案 1 :(得分: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;
}

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