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。)

以上三个地方在使用动画效果是比较重要

你可能感兴趣的:(入门)