• 解决winform中gif小图片不会闪动问题 201079 23:00阅读(3)


    在项目中加上AnimateImage.cs文件

    下面是AnimateImage类的内容

    using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Imaging;
    
    namespace Project {     /// <summary>       /// 表示一类带动画功能的图像。       /// </summary>       public class AnimateImage     {         Image image;         FrameDimension frameDimension;         /// <summary>           /// 动画当前帧发生改变时触发。           /// </summary>           public event EventHandler<EventArgs> OnFrameChanged;
    
            /// <summary>           /// 实例化一个AnimateImage。           /// </summary>           /// <param name="img">动画图片。</param>           public AnimateImage(Image img)         {             image = img;
    
                lock (image)             {                 mCanAnimate = ImageAnimator.CanAnimate(image);                 if (mCanAnimate)                 {                     Guid[] guid = image.FrameDimensionsList;                     frameDimension = new FrameDimension(guid[0]);                     mFrameCount = image.GetFrameCount(frameDimension);                 }             }         }
    
            bool mCanAnimate;         int mFrameCount = 1, mCurrentFrame = 0;
    
            /// <summary>           /// 图片。           /// </summary>           public Image Image         {             get { return image; }         }
    
            /// <summary>           /// 是否动画。           /// </summary>           public bool CanAnimate         {             get { return mCanAnimate; }         }
    
            /// <summary>           /// 总帧数。           /// </summary>           public int FrameCount         {             get { return mFrameCount; }         }
    
            /// <summary>           /// 播放的当前帧。           /// </summary>           public int CurrentFrame         {             get { return mCurrentFrame; }         }
    
            /// <summary>           /// 播放这个动画。           /// </summary>           public void Play()         {             if (mCanAnimate)             {                 lock (image)                 {                     ImageAnimator.Animate(image, new EventHandler(FrameChanged));                 }             }         }
    
            /// <summary>           /// 停止播放。           /// </summary>           public void Stop()         {             if (mCanAnimate)             {                 lock (image)                 {                     ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));                 }             }         }
    
            /// <summary>           /// 重置动画,使之停止在第0帧位置上。           /// </summary>           public void Reset()         {             if (mCanAnimate)             {                 ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));                 lock (image)                 {                     image.SelectActiveFrame(frameDimension, 0);                     mCurrentFrame = 0;                 }             }         }
    
            private void FrameChanged(object sender, EventArgs e)         {             mCurrentFrame = mCurrentFrame + 1 >= mFrameCount ? 0 : mCurrentFrame + 1;             lock (image)             {                 image.SelectActiveFrame(frameDimension, mCurrentFrame);             }             if (OnFrameChanged != null)             {                 OnFrameChanged(image, e);             }         }     } }
    
    AnimateImage类的内容结束-----
    
     
    
    AnimateImage类的用法:
    
    在图片应用的窗体后台代码中:
    
    public partial class Default : Form     {         AnimateImage image;
    
       public Default()         {                                    //图片动态显示             image = new AnimateImage(Image.FromFile(Application.StartupPath + "\\" + "Imgs" + "\\" + "02.gif"));             image.OnFrameChanged += new EventHandler<EventArgs>(image_OnFrameChanged);             SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
    
                        }
    
    private void Default_Load(object sender, EventArgs e)         {                         image.Play();             this.pictureBoxBianlukou.ImageLocation = Application.StartupPath + "\\" + "Imgs" + "\\" + "02.gif";                     }
    
    }
    待人以诚,做事用心,对事不对人.
  • 相关阅读:
    leetcode 11. 盛最多水的容器
    gluoncv 导入方式
    python import
    leetcode 55.跳跃游戏
    leetcode 31. 下一个排列
    gluoncv 下载预训练模型速度太慢
    gluoncv voc_detection
    shuf 按行打乱文本命令
    __call__
    @property 装饰器
  • 原文地址:https://www.cnblogs.com/jiangguang/p/2761024.html
Copyright © 2020-2023  润新知