您的位置:首页 > 编程语言 > C#

C# 显示GIF 暂停 播放 重置

2010-04-02 13:04 309 查看
今天用到显示GIF,需要停止的功能,在网上找到了相关资料,但是有点问题。解决如下

/**/
///
/// 表示一类带动画功能的图像。
///
public class AnimateImage
{
Image image;
FrameDimension frameDimension;
/**/
///
/// 动画当前帧发生改变时触发。
///
public event EventHandler OnFrameChanged;

/**/
///
/// 实例化一个AnimateImage。
///
/// 动画图片。
public AnimateImage(Image img)
{
image = img;
lock (image)
{
mCanAnimate = ImageAnimator.CanAnimate(image);
if (mCanAnimate)
{
Guid[] guid = image.FrameDimensionsList;

frameDimension = new FrameDimension(guid[0]); //旧版没有此句,参照网上添加的代码

mFrameCount = image.GetFrameCount(frameDimension);
}
}
}

bool mCanAnimate; //是否具有动画的图片
int mFrameCount = 1, mCurrentFrame = 0;

/**/
///
/// 图片。
///
public Image Image
{
get { return image; }
}

/**/
///
/// 是否动画。
///
public bool CanAnimate
{
get { return mCanAnimate; }
}

/**/
///
/// 总帧数。
///
public int FrameCount
{
get { return mFrameCount; }
}

/**/
///
/// 播放的当前帧。
///
public int CurrentFrame
{
get { return mCurrentFrame; }
}
/**/
///
/// 播放这个动画。
///
public void Play()
{
if (mCanAnimate)
{
lock (image)
{
ImageAnimator.Animate(image, new EventHandler(FrameChanged));
}
}
}

/**/
///
/// 停止播放。
///
public void Stop()
{
if (mCanAnimate)
{
lock (image)
{
ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));
}
}
}

/**/
///
/// 重置动画,使之停止在第0帧位置上。
///
public void Reset()
{
if (mCanAnimate)
{
ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));

mCurrentFrame = 0; //这里修改了去掉旧的代码,添加下一行代码。旧代码并没有显示第一帧。FrameChanged没有执行,因此手动执行

FrameChanged(null, null);
}
}

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: