如何在按钮控件上使用动态GIF?

3
也许这是一个愚蠢的问题,但我无法解决下一个问题。 我正在将gif动画放在按钮上。 但它按顺序循环播放,从不停止。 我需要使其在完成一圈后停止。
Bitmap boom = new Bitmap("boom.gif");
b[ship2.Column, ship2.Row].Image = boom;

我的代码有什么问题?

3个回答

0
我建议您使用 pictureBox 并尝试此代码(如果可以实现)。
请查看 ImageAnimator 类
// 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
}

@user3281887 这是针对图片框的。如果您想继续使用按钮,请遵循cvsguimaraes的答案。 - Marek

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();
    } 

0

你的代码没有问题。

循环次数存储在图像元数据中。因此,你需要提供一个禁用了循环的gif或者使用某种gif编辑器进行编辑。

编辑

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

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

我按照你说的做了一切,如果在Internet Explorer中启动此GIF,则它只运行一次。但是在C#中它仍然永远运行 :( - user3281887
似乎他正在忽略这些元数据。我会改进回答。 - kbtz

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