我想要绘制一个.png文件,问题是,我每隔1/10秒绘制一次这样的png,这样每秒10次。这个png是用X和Y坐标作为中间点绘制的,所以图像的中间是X和Y坐标。
使用此代码:
private void frmMap_Paint(object sender, PaintEventArgs e)
{
Bitmap FlashLight = new Bitmap(
Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + @"light.png"), 4000, 2160);
e.Graphics.DrawImage(FlashLight, new Point(mapX, mapY));
}
问题是,当每秒绘制这个png 10次时,改变X和Y坐标会导致很多闪烁。
有没有人知道如何减少或消除闪烁?我已经研究了在屏幕上绘制位图并在完成绘图后加载它,我不知道如何做到这一点。
我也研究了双缓冲,我再也不知道如何使用它来减少我的闪烁。
答案 0 :(得分:0)
Winforms
绝对不适合动画。
这是一个建议,你可能会或可能不会发现足够好:
将大Image
加载到PictureBox.Image
并设置PictureBox.SizeMode = AutoSize
。
然后在动画Timer.Tick
中移动PictureBox
。
这是一个很小的例子:
Timer timer = new Timer();
timer.Interval = 100;
timer.Tick += timer_Tick;
// when the timer runs..
timer.Enabled = !timer.Enabled;
..它移动了PictureBox
:
void timer_Tick(object sender, EventArgs e)
{
Point pt = new Point(pictureBox1.Left + offsetX, pictureBox1.Top + offsetY);
pictureBox1.Location = pt;
}
请注意,该位置可以毫无问题地进入否定状态!
使图像的初始位置居中使用:
pictureBox1.Location = new Point(-(pictureBox1.Width - Width)/2,
-(pictureBox1.Height - Height)/2);
为了获得更好的动画支持,您可以考虑使用WPF。