C# 需要选择gif格式的帧

C# 需要选择gif格式的帧,c#,winforms,picturebox,gif,animated-gif,C#,Winforms,Picturebox,Gif,Animated Gif,我需要重新启动gif图像,以便它从第一帧开始。 我对C语言中的gif图像几乎没有经验。我使用的是C windows窗体应用程序。我的gif图像在一个图片盒中。我需要在每次有人按下按钮时重新启动它 我尝试过: pictureBox1.Image.SelectActiveFrame(new FrameDimension(pictureBox1.Image.FrameDimensionsList[0]), 0) 但它没有显示出任何变化 我也尝试过图像动画也没有运气。我真的需要帮助,这是我高中工程的最

我需要重新启动gif图像,以便它从第一帧开始。 我对C语言中的gif图像几乎没有经验。我使用的是C windows窗体应用程序。我的gif图像在一个图片盒中。我需要在每次有人按下按钮时重新启动它

我尝试过:

pictureBox1.Image.SelectActiveFrame(new FrameDimension(pictureBox1.Image.FrameDimensionsList[0]), 0)
但它没有显示出任何变化


我也尝试过图像动画也没有运气。我真的需要帮助,这是我高中工程的最后一个项目。

我尝试了这个解决方案,效果很好:

Image animated = pictureBox1.Image;
pictureBox1.Image = animated;

这样,您可以重置pictureBox1.Image,以便动画GIF从头开始。

我尝试了此解决方案,效果良好:

Image animated = pictureBox1.Image;
pictureBox1.Image = animated;
这样,您可以重置pictureBox1.Image,使动画GIF从头开始。

我发现Image.SelectActiveFrame似乎不起作用,因为它的工作方式与您的想法不同。它只设置初始帧,如果有一些控件读取其帧,则读取的第一帧是活动帧。因此,在选择ActiveFrame后,必须将pictureBox的Image属性重新指定给该新图像,如下所示:

private void RestartToFrameIndex(int index){
   pictureBox.Image.SelectActiveFrame(new FrameDimension(pictureBox.Image.FrameDimensionsList[0]), index);
   pictureBox.Image = pictureBox.Image;
}

//If you want to restart to the first frame, just call the method above like this:
RestartToFrameIndex(0);
这就是我刚刚找到的一般解决方案:希望它能帮助其他人……

我发现Image.SelectActiveFrame似乎不起作用,因为它的工作原理与您的想法不同。它只设置初始帧,如果有一些控件读取其帧,则读取的第一帧是活动帧。因此,在选择ActiveFrame后,必须将pictureBox的Image属性重新指定给该新图像,如下所示:

private void RestartToFrameIndex(int index){
   pictureBox.Image.SelectActiveFrame(new FrameDimension(pictureBox.Image.FrameDimensionsList[0]), index);
   pictureBox.Image = pictureBox.Image;
}

//If you want to restart to the first frame, just call the method above like this:
RestartToFrameIndex(0);

这就是我刚刚找到的一般解决方案:希望它能帮助其他人…

您不需要先将其设置为null,只需在一行代码中将其设置为动画即可。我已经测试过:没什么,这对那些遇到这个问题的人来说更好。事实上,我想找到另一种方法,例如不重新启动到第一帧,而是第二帧或第三帧。。。这将是最普遍的方式。但它似乎不存在。关于您的更新,您是否使用pictureBox1.Image=pictureBox1.Image;?它似乎不起作用。当前帧将冻结一段时间,然后下一帧将继续。这很奇怪,但我想我已经找到了一种解决一般情况的方法,我将在测试后更新我的答案是的!非常感谢,它与[动画]配合得非常好@Mehran您不需要先将其设置为null,只需在一行代码中将其设置为动画即可。我已经测试过:没什么,这对那些遇到这个问题的人来说更好。事实上,我想找到另一种方法,例如不重新启动到第一帧,而是第二帧或第三帧。。。这将是最普遍的方式。但它似乎不存在。关于您的更新,您是否使用pictureBox1.Image=pictureBox1.Image;?它似乎不起作用。当前帧将冻结一段时间,然后下一帧将继续。这很奇怪,但我想我已经找到了一种解决一般情况的方法,我将在测试后更新我的答案是的!非常感谢,它与[动画]配合得非常好@Mehrand这对你有用吗?我无法使其适用于其他帧,如10或20 pictureBox.Image=ImagepictureBox.Image.Clone;每次都将图像重置为第0帧!我已经测试过了,效果很好,因为您的图像帧数可能小于10。我的代码不检查帧数,但如果是这样,将抛出一个通用GDI异常,那么3,4,5呢?只有10个或20个?对你有用吗?我无法使其适用于其他帧,如10或20 pictureBox.Image=ImagepictureBox.Image.Clone;每次都将图像重置为第0帧!我已经测试过了,效果很好,因为您的图像帧数可能小于10。我的代码不检查帧数,但如果是这样,将抛出一个通用GDI异常,那么3,4,5呢?只有10个还是20个?