WinForm中怎么加GIF图片?

ct2006zxc 2011-03-25 09:43:20
1.using System;
2.using System.Collections.Generic;
3.using System.Text;
4.using System.Drawing;
5.using System.Drawing.Imaging;
6.
7.namespace GifTest
8.{
9. /**//// <summary>
10. /// 表示一类带动画功能的图像。
11. /// </summary>
12. public class AnimateImage
13. {
14. Image image;
15. FrameDimension frameDimension;
16. /**//// <summary>
17. /// 动画当前帧发生改变时触发。
18. /// </summary>
19. public event EventHandler<EventArgs> OnFrameChanged;
20.
21. /**//// <summary>
22. /// 实例化一个AnimateImage。
23. /// </summary>
24. /// <param name="img">动画图片。</param>
25. public AnimateImage(Image img)
26. {
27. image = img;
28. lock (image)
29. {
30. mCanAnimate = ImageAnimator.CanAnimate(image);
31. if (mCanAnimate)
32. {
33. Guid[] guid = image.FrameDimensionsList;
34. mFrameCount = image.GetFrameCount(frameDimension);
35. }
36. }
37. }
38.
39. bool mCanAnimate;
40. int mFrameCount = 1, mCurrentFrame = 0;
41.
42. /**//// <summary>
43. /// 图片。
44. /// </summary>
45. public Image Image
46. {
47. get { return image; }
48. }
49.
50. /**//// <summary>
51. /// 是否动画。
52. /// </summary>
53. public bool CanAnimate
54. {
55. get { return mCanAnimate; }
56. }
57.
58. /**//// <summary>
59. /// 总帧数。
60. /// </summary>
61. public int FrameCount
62. {
63. get { return mFrameCount; }
64. }
65.
66. /**//// <summary>
67. /// 播放的当前帧。
68. /// </summary>
69. public int CurrentFrame
70. {
71. get { return mCurrentFrame; }
72. }
73. /**//// <summary>
74. /// 播放这个动画。
75. /// </summary>
76. public void Play()
77. {
78. if (mCanAnimate)
79. {
80. lock (image)
81. {
82. ImageAnimator.Animate(image, new EventHandler(FrameChanged));
83. }
84. }
85. }
86.
87. /**//// <summary>
88. /// 停止播放。
89. /// </summary>
90. public void Stop()
91. {
92. if (mCanAnimate)
93. {
94. lock (image)
95. {
96. ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));
97. }
98. }
99. }
100.
101. /**//// <summary>
102. /// 重置动画,使之停止在第0帧位置上。
103. /// </summary>
104. public void Reset()
105. {
106. if (mCanAnimate)
107. {
108. ImageAnimator.StopAnimate(image, new EventHandler(FrameChanged));
109. lock (image)
110. {
111. image.SelectActiveFrame(frameDimension, 0);
112. mCurrentFrame = 0;
113. }
114. }
115. }
116.
117. private void FrameChanged(object sender, EventArgs e)
118. {
119. mCurrentFrame = mCurrentFrame + 1 >= mFrameCount ? 0 : mCurrentFrame + 1;
120. lock (image)
121. {
122. image.SelectActiveFrame(frameDimension, mCurrentFrame);
123. }
124. if (OnFrameChanged != null)
125. {
126. OnFrameChanged(image, e);
127. }
128. }
129. }
130.


使用如下方法调用:


view plaincopy to clipboardprint?


1.using System;
2.using System.Collections.Generic;
3.using System.ComponentModel;
4.using System.Data;
5.using System.Drawing;
6.using System.Drawing.Imaging;
7.using System.Text;
8.using System.Windows.Forms;
9.
10.namespace GifTest
11.{
12. public partial class Form1 : Form
13. {
14. AnimateImage image;
15.
16. public Form1()
17. {
18. InitializeComponent();
19. image = new AnimateImage(Image.FromFile(@"C:\Documents and Settings\Administrator\My Documents\My Pictures\未命名.gif"));
20. image.OnFrameChanged += new EventHandler<EventArgs>(image_OnFrameChanged);
21. SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
22. }
23.
24. void image_OnFrameChanged(object sender, EventArgs e)
25. {
26. Invalidate();
27. }
28.
29. private void Form1_Load(object sender, EventArgs e)
30. {
31. image.Play();
32. }
33.
34. private void Form1_Paint(object sender, PaintEventArgs e)
35. {
36. lock (image.Image)
37. {
38. e.Graphics.DrawImage(image.Image, new Point(0, 0));
39. }
40. }
41.
42. private void button1_Click(object sender, EventArgs e)
43. {
44. if (button1.Text.Equals("Stop"))
45. {
46. image.Stop();
47. button1.Text = "Play";
48. }
49. else
50. {
51. image.Play();
52. button1.Text = "Stop";
53. }
54. Invalidate();
55. }
56.
57. private void button2_Click(object sender, EventArgs e)
58. {
59. image.Reset();
60. button1.Text = "Play";
61. Invalidate();
62. }
63. }
64.}
这是我拷贝的代码,怎么用不了呢?图片不显示啊,求大神指点
...全文
322 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
leroncheung 2011-03-26
  • 打赏
  • 举报
回复

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧