如何在Button控件上使用动画GIF?

时间:2014-02-07 00:18:09

标签: c# winforms animated-gif

也许这是一个愚蠢的问题,但无法管理下一个问题。 我在按钮上放了gif动画。但它顺序循环,永不停止。 我需要在完成一圈后停止。

Bitmap boom = new Bitmap("boom.gif");
b[ship2.Column, ship2.Row].Image = boom;

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:0)

您的代码没有错。

循环次数存储在图像元数据中。所以基本上你需要提供一个禁用循环的gif或edit it with some kind of gif editor.

修改

由于它忽略了gif元数据并永远循环,你可以使用http://gif-explode.com/来获取gif的最后一帧。然后测量动画循环的里程数,并执行以下操作:

  1. 将gif设置为按钮的背景
  2. 启动计时器
  3. 等待计时器达到单个动画循环的里程数
  4. 用最后一帧的图像替换gif

答案 1 :(得分:0)

我建议您使用pictureBox并尝试使用此代码(如果可能,请执行)

查看ImageAnimator Class

// this starts animation 
System.Drawing.ImageAnimator.Animate(pictBox.Image, OnFrameChanged);

// this stops animation
System.Drawing.ImageAnimator.StopAnimate(pictBox.Image, OnFrameChanged);

private void OnFrameChanged(object sender, EventArgs e)
{
   // conditions
}

答案 2 :(得分:0)

你可以使用一系列图像而不是gif。您可以使用计时器并将间隔设置为所需的速度。计时器将在每次抽搐时更改按钮的图像。你需要gif的框架。你可以去 - > http://gif-explode.com/。把gif放在那里,得到每一帧。然后,您可以将图像放在图像列表中。我想你想要在点击按钮时启动动画。

    int i = 0;
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (i == imageList1.Images.Count)
        {
            timer1.Stop();
            i = 0;
        }

        button1.Image = imageList1.Images[i];
        i++;        
    }

    private void button1_Click(object sender, EventArgs e)
    {
        timer1.Start();
    }