用C#显示GIF动画的方法~~~
不知道大家发现没有,用drawimage()方法画出来的GIF动画只能静止地显示第一帧。
picturebox控件虽然能够正常显示,但作为一个控件类,这个类有些太庞大了,将消耗大量的资源,窗体上多放几个,速度就明显变慢了!用C#写点小游戏,速度超慢可不行!(GIF与PNG都支持背景透明)
是不是没有办法了?不是,C#提供了imageanimator类来实现GIF动画。该类提供了CanAnimate、FrameCount、CurrentFrame等属性,以及Play()、Stop()、Reset()等动画常用的方法。
下面是一个示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义一个bitmap对像,用现有的GIF文件初始化。
Bitmap bitmap = new Bitmap("1.gif");
//定义一个布尔型标记,用来指示是否开始播放动画。
bool current = false;
public void AnimateImage()
{
//如果函数首次调用,将执行IF语句中的内容,再次调用时,将不再执行IF中的语句,防止第二次调用Animate()方法。
if (!current)
{
ImageAnimator.Animate(bitmap, new EventHandler(this.OnFrameChanged));
current = true;
}
}
//将绘图区无效,此方法将引发重绘。
private void OnFrameChanged(object o, EventArgs e)
{
this.Invalidate();
}
//重写重绘的代码,以便在重绘发生时能够同时绘制GIF动画。
protected override void OnPaint(PaintEventArgs e)
{
AnimateImage();
ImageAnimator.UpdateFrames();
e.Graphics.DrawImage(this.bitmap, new Point(0, 0));
}
private void button1_Click(object sender, EventArgs e)
{
ImageAnimator.StopAnimate(bitmap, new EventHandler(this.OnFrameChanged));//停止
}
private void button2_Click(object sender, EventArgs e)
{
ImageAnimator.Animate(bitmap, new EventHandler(this.OnFrameChanged));//播放
}
}
[ 本帖最后由 athenalux 于 2010-4-26 15:27 编辑 ]