GDI+入门(5、在GDI+中绘制带动画效果的图片)
五、在GDI+中绘制带动画效果的图片
private void Form2_Load(object sender, EventArgs e)
{
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
bmp = new Bitmap("1.gif");
ImageAnimator.Animate(bmp, new EventHandler(this.OnFrameChanged));
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
ImageAnimator.UpdateFrames();
e.Graphics.DrawImage(this.bmp, new Point(0, 0));
}
private void OnFrameChanged(object o, EventArgs e)
{
this.Invalidate();
}
代码很简单:
我来解释一下关键的几个地方
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
使用二级缓冲,可以有效的防止图片闪烁
ImageAnimator:动画处理包含基于时间的帧的图像。
Animate 将多帧图像显示为动画。
CanAnimate 返回一个布尔值,该值指示指定图像是否包含基于时间的帧。
Finalize 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
StopAnimate 终止正在运行的动画。
UpdateFrames()使该帧在当前正被动画处理的所有图像中前移。新帧在下一次呈现图像时绘制。
UpdateFrames(Image) 使帧在指定的图像中前移。新帧在下一次呈现图像时绘制。此方法只适用于包含基于时间的帧的图像。
this.Invalidate();
Invalidate()使显示在设计图面上的控件的整个区域无效,并向控件设计器发送重新绘制控件的信号。(继承自 ControlDesigner。)
Invalidate(Rectangle) 使显示在设计图面上的控件的指定区域无效,并向控件设计器发送重新绘制控件的信号。(继承自 ControlDesigner。)
以上三个地方在使用动画效果是比较重要
浙公网安备 33010602011771号