编辑: xiong447385 | 2019-12-16 |
(2)Animate()方法 ?? 该方法将多帧图像显示为动画. ? 格式:public static void Animate ( Image image, EventHandler onFrameChangeHandler) ? image 要动画处理的Image对象 ? onFrameChangedHandler:指定在动画帧发生更改时调用的方法. (3)CanAnimate()方法 ? 此方法返回一个布尔值,该值指示指定图像是否包含基于时间的帧. ?参数为要测试的Image方法,如果指定图像包含基于时间的帧,则方法返回True. (4).StopAnimate()方法 ? 终止正在运行的动画. (5)UpdateFrames()方法 ?此方法使帧在图像中迁移.新帧在下一次呈现图像时绘制.此方法只适用于包含基于时间的帧的图像. ?它的参数为更新帧的Image对象. 实例代码: ?private Image m_imgImage = null;
??????? private EventHandler m_evthdlAnimator = null;
??????? public Form1()//// InitializeComponent();
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
TODO: Add any constructor code after InitializeComponent call m_evthdlAnimator = new EventHandler(OnImageAnimate);
Debug.Assert(m_evthdlAnimator != null);
重写打印方法 ??????? protected override void OnPaint(PaintEventArgs e) base.OnPaint(e);
if (m_imgImage != null) UpdateImage();
绘制图片的当前帧 e.Graphics.DrawImage(m_imgImage, new Rectangle(10, 10, m_imgImage.Width, m_imgImage.Height));
加载测试用的Gif图片 ??????? protected override void OnLoad(EventArgs e) base.OnLoad(e);
m_imgImage = Image.FromFile("1.GIF");
// 加载测试用的Gif图片 BeginAnimate();
//调用方法 ??????? private void UpdateImage() if (m_imgImage == null) return;
if (ImageAnimator.CanAnimate(m_imgImage)) ImageAnimator.UpdateFrames(m_imgImage);
将图片设为动画开始给图 ??????? private void BeginAnimate() if (m_imgImage == null) return;
if (ImageAnimator.CanAnimate(m_imgImage)) ImageAnimator.Animate(m_imgImage, m_evthdlAnimator);
???? ?????? 关闭给图 ??????? private void StopAnimate() if (m_imgImage == null) return;
if (ImageAnimator.CanAnimate(m_imgImage)) ImageAnimator.StopAnimate(m_imgImage, m_evthdlAnimator);
??????? private void OnImageAnimate(Object sender, EventArgs e) this.Invalidate();
??????? private void Form1_FormClosed(object sender, FormClosedEventArgs e) if (m_imgImage != null) StopAnimate();
m_imgImage = null;