快速移动图片

时间:2014-02-21 16:03:43

标签: c# .net winforms image

我需要在Windows窗体应用程序中移动图片。

这有效,但速度非常慢。有没有办法更快地移动图片?我想这样做是因为我希望达到“Flyin”效果。

// First try
for (int i = 0; i < 500; i++)
{
  //Tempbox is a picturebox
  this.Tempbox.Location = new Point(this.Tempbox.Left++, 0);
  Application.DoEvents();
  System.Threading.Thread.Sleep(50);
}

// Second try
using (Graphics g = Graphics.FromImage(BufferBm))
{
  for (int i = 0; i < 500; i++)
  {
    g.DrawImage(tempContolImage, new System.Drawing.Point(i, 0));
    this.Tempbox.Image = BufferBm;
    Application.DoEvents();
    System.Threading.Thread.Sleep(50);
  }
}

3 个答案:

答案 0 :(得分:3)

我还推荐WPF,因为它使用directx,但是如果你没有时间学习它,这可以帮助你:

How to fix the flickering in User controls

设置DoubleBuffered = true;

将此hack放入表单代码中:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 

如果你有usercontrol,请将其放入代码:

protected override CreateParams CreateParams {
  get {
    var parms = base.CreateParams;
    parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
    return parms;
  }
}

答案 1 :(得分:2)

使用WPF。 http://msdn.microsoft.com/de-de/library/ms752312(v=vs.110).aspx

你也可以混合winForms和WPF。

如果你不使用WPF,请确保将doublebuffer设置为true

答案 2 :(得分:0)

  • 最简单的方法之一就是在面板上绘制图像或类似图像 - 然后将其移到表单上。
  • 另一种方法是使用转换技术。