winfrom播放动态图片
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);
}
}
}

浙公网安备 33010602011771号