【问题标题】:How to synchronize picturebox images如何同步图片框图像
【发布时间】:2014-01-19 02:17:33
【问题描述】:

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

我有两个问题:

  1. 不知道如何实现GetPictureFrameIndex
  2. SetPictureFrameIndex 不起作用。它设置并显示选定的帧,但下一个显示的帧始终是 frameindex = 1,而不是 frameindex = index + 1

有人可以帮帮我吗? 即使是使用反射的破解解决方案也可以(如果需要使用反射)。

【问题讨论】:

    标签: c# .net winforms user-interface reflection


    【解决方案1】:

    有一个可以帮助您解决类似问题的技巧:Pause a GIF in a form

    另外,您可以尝试同时重置图像。将图片放在一个临时变量中,将两个图片框的图片都赋值为null,然后同时重新赋值。

    【讨论】:

    • 好吧,但我不知道我应该通过反射调用哪个方法。我认为 Animate 只是运行和停止动画。
    • 你的第二种方法对我也不好,因为当我重置两个图像时,用户会在第一个(前导)图像中看到一个跳帧,它总是显示出来。
    【解决方案2】:

    黑客解决方案可能是将当前图像卸载到临时变量中,为图像设置一个临时值,然后将其设置回临时变量。这会强制每个图像从其起点刷新。

    只需用它枚举每个图片框,它应该会刷新到几乎同步,这取决于你有多少以及我想操作需要多长时间。

    假设您有一个名为 pic 的图片框。

    var loc = pic.ImageLocation;
    pic.ImageLocation = "";
    pic.ImageLocation = loc;
    

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 2012-03-16
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2019-06-15
      • 2022-11-16
      • 2019-07-17
      相关资源
      最近更新 更多