using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace GifTest
{
/**//// <summary>
/// 表示一類帶動畫功能的圖像。
/// </summary>
public class AnimateImage
{
Image image;
FrameDimension frameDimension;
/**//// <summary>
/// 動畫當前幀發(fā)生改變時觸發(fā)。
/// </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;
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>
/// 總幀數(shù)。
/// </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);
}
}
}
}