Winform窗体上绘制并播放gif动画

今天需要做在winform窗口显示并播放gif动画图片效果,网上找了找,并整理如下:

基本上都是使用RascallySnake的代码:http://www.cnblogs.com/RascallySnake/archive/2010/02/07/1665596.html

测试时调用Loadgif()

        #region 动画

        //首先定义私有变量 
        private Image m_img = null;
        private EventHandler evtHandler = null;
        private int testx=100;
        int testy=100;
        //重载的当前winform的OnPaint方法,当界面被重绘时去显示当前gif显示某一帧
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            if (m_img != null)
            {
                //获得当前gif动画下一步要渲染的帧。
                UpdateImage();
                //将获得的当前gif动画需要渲染的帧显示在界面上的某个位置。
                //注意此处,如果是要在panle1上绘制,需要修改为this.panle1.CreateGraphics();
                Graphics gfx = this.CreateGraphics();
                gfx.DrawImage(m_img, new Rectangle(testx, testy, m_img.Width, m_img.Height));
            }
        }

        //实现Load方法
        private void Loadgif()
        {
            //为委托关联一个处理方法
            evtHandler = new EventHandler(OnImageAnimate);
            //获取要加载的gif动画文件
            m_img = Image.FromFile(Application.StartupPath + @"\well.gif");
            //调用开始动画方法
            BeginAnimate();
        }
        //开始动画方法
        private void BeginAnimate()
        {
            if (m_img != null)
            {
                //当gif动画每隔一定时间后,都会变换一帧,那么就会触发一事件,该方法就是将当前image每变换一帧时,都会调用当前这个委托所关联的方法。
                ImageAnimator.Animate(m_img, evtHandler);
            }
        }
        //委托所关联的方法
        private void OnImageAnimate(Object sender, EventArgs e)
        {
            //该方法中,只是使得当前这个winfor重绘,然后去调用该winform的OnPaint()方法进行重绘)
            this.Invalidate();
        }
        //获得当前gif动画的下一步需要渲染的帧,当下一步任何对当前gif动画的操作都是对该帧进行操作)
        private void UpdateImage()
        {
            ImageAnimator.UpdateFrames(m_img);
        }
        //关闭显示动画,该方法可以在winform关闭时,或者某个按钮的触发事件中进行调用,以停止渲染当前gif动画。
        private void StopAnimate()
        {
            m_img = null;
            ImageAnimator.StopAnimate(m_img, evtHandler);
        }

        #endregion

 

 

posted @ 2014-03-13 16:05  了了之  阅读(2012)  评论(0编辑  收藏  举报