winfrom是不能直接加载的动态图片的。只能够自己写方法实现。
具体代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WinLibraryDemo { public partial class Form2 : Form { //首先定义私有变量 private Image m_img = null; private EventHandler evtHandler = null; public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { //设置透明的背景色 this.BackColor = Color.White; this.TransparencyKey = Color.White; //无标题栏 this.FormBorderStyle = FormBorderStyle.None; //为委托关联一个处理方法 evtHandler = new EventHandler(OnImageAnimate); //获取要加载的gif动画文件 m_img = Image.FromFile(@"C:\123.gif"); //调用开始动画方法 BeginAnimate(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (m_img != null) { //获得当前gif动画下一步要渲染的帧。 UpdateImage(); //将获得的当前gif动画需要渲染的帧显示在界面上的某个位置。 e.Graphics.DrawImage(m_img, new Rectangle(145, 140, m_img.Width, m_img.Height)); } } //开始动画方法 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); } } }
时间: 2024-10-18 00:10:28