动态图片显示控件----------WinForm控件开发系列

PictureBox 控件无法显示gif格式的图片,该控件是继承于 Control 基类开发的。该控件利用.NET自带 ImageAnimator 类来处理图片的帧。如下:

复制代码
 1         /// <summary>   
 2         /// 开始循环播放动态图片   
 3         /// </summary>   
 4         private void StartAnimation()
 5         {
 6             lock (this.Image)
 7             {
 8                 ImageAnimator.Animate(this.Image, new EventHandler(this.FrameChanged));
 9 
10 
11                 if (!this.DesignMode)
12                 {
13                     this.OnFrameIndexChanged(new FrameIndexChangedEventArgs() { FrameIndex = currentFrame });
14                 }
15             }
16         }
17 
18         /// <summary>   
19         /// 停止循环播放动态图片  
20         /// </summary>   
21         private void StopAnimation()
22         {
23             lock (this.Image)
24             {
25                 ImageAnimator.StopAnimate(this.Image, new EventHandler(this.FrameChanged));
26                 this.resetProperty();
27 
28                 if (!this.DesignMode)
29                 {
30                     this.OnFrameIndexChanged(new FrameIndexChangedEventArgs() { FrameIndex = currentFrame });
31                 }
32             }
33         }
34 
35         /// <summary>
36         /// 重置图片信息
37         /// </summary>
38         private void resetProperty()
39         {
40             this.frameDimension = null;
41             this.isAnimation = false;
42             this.frameCount = 0;
43             this.currentFrame = -1;
44         }
45 
46         /// <summary>
47         /// 当前帧更改事件
48         /// </summary>
49         /// <param name="sender"></param>
50         /// <param name="e"></param>
51         private void FrameChanged(object sender, EventArgs e)
52         {
53             this.currentFrame = this.currentFrame + 1 >= this.frameCount ? 0 : this.currentFrame + 1;
54             lock (this.image)
55             {
56                 this.image.SelectActiveFrame(this.frameDimension, this.currentFrame);
57                 this.Invalidate();
58             }
59         }
处理帧的主要方法
复制代码

 

 重写的方法如下

公开方法如下

新增的类如下

新增属性如下

控件库的源码已整体发布到gitee,下载地址:(花木兰控件库)https://gitee.com/tlmbem/hml

posted @   唧唧复唧唧木兰当户织  阅读(2371)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示