在c#Windows窗体中平滑动画



我想在pictureBox中逐帧(逐图片(显示动画。我有42帧,我想把它做得很快。我使用了Timer组件,但间隔=1毫秒太慢了,我想知道是否有任何方法可以在c#Windows窗体(Visual Studio(中使用大量帧制作快速动画。这就是我现在使用的

Bitmap[] FelixBanner = new Bitmap[50];
public Form1()
{
InitializeComponent();
for(int i = 1; i <= 42; i++)
FelixBanner[i] = new Bitmap(@"PhotosFelix" + i + "FB.bmp");
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
int k = 1;
private void timer1_Tick(object sender, EventArgs e)
{
if (k == 41) 
timer1.Enabled = false;
Felix.Image = FelixBanner[k];
k++;
}

首先,没有一个内置计时器的精度为1ms。我不重复或复制粘贴我的旧答案,但看到了高精度计时器的链接。或者在GitHub上查看完整的源代码。

其次,使用PictureBox控件进行自定义渲染是过分的。除非你使用缩放/拉伸功能,或者为它指定一个动画GIF,否则你根本不需要它。在简单的Panel中渲染动画要有效得多,例如使用Paint事件。这就是你可以做到的:

private void timer1_Tick(object sender, EventArgs e)
{        
if (k == 41) 
timer1.Enabled = false;
//Felix.Image = FelixBanner[k];
k++;
panelAnimation.Invalidate();
}
void panelAnimation_Paint(object sender, PaintEventArgs e)
{
// make sure "k" is a valid index even after playing the animation because the
// Paint event might be called whenever your form is resized or has to be repaint
var image = FelixBanner[k];
e.Graphics.DrawImage(image, 0, 0, image.Width, image.Height);
}

最新更新