在我用C#编写的winforms应用程序中,我需要同步放在2个图片盒上的2个GIF图像的时间。这意味着,一个图片框有一个动画GIF图像,第二个图片框有相同的动画GIF图像,但颜色不同。当出现第二个图片框时,两个图像必须以相同的帧序列显示。
根据King King在this thread中的回答,我实现了这种扩展方法:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void _buttonTest_Click(object sender, EventArgs e)
{
_pictureBox2.Visible = !_pictureBox2.Visible;
if (_pictureBox2.Visible)
_pictureBox2.SynchronizeWith(_pictureBox1);
}
}
public static class PictureBoxServices
{
public static void SetPictureFrameIndex(this PictureBox pictureBox, int index)
{
pictureBox.Image.SelectActiveFrame(new FrameDimension(pictureBox.Image.FrameDimensionsList[0]), index);
pictureBox.Image = pictureBox.Image; // restart on selected index
}
public static int GetPictureFrameIndex(this PictureBox pictureBox)
{
throw new NotImplementedException();
}
public static void SynchronizeWith(this PictureBox pictureBoxThis, PictureBox pictureBoxToSynchronizeWith)
{
pictureBoxThis.SetPictureFrameIndex(pictureBoxToSynchronizeWith.GetPictureFrameIndex());
}
}
我有两个问题:
答案 0 :(得分:0)
有一个类似问题的黑客攻击可以帮到你:Pause a GIF in a form。
此外,您可以尝试同时重置图像。将图像放在临时变量中,将两个图片框的图像分配为空,然后同时重新分配图像。
答案 1 :(得分:0)
一种解决方法可能是将当前图像卸载到临时变量中,为该图像设置一个临时值,然后将其设置回temp变量。这会强制每个图像从其起点刷新。
只需枚举每个图片框,它就会刷新为几乎同步,这取决于您拥有的数量和我估计的操作时间。
假设您有一个名为pic的图片框。
var loc = pic.ImageLocation;
pic.ImageLocation = "";
pic.ImageLocation = loc;