步骤:
一 新建一个winform项目,并拖入一个PictureBox控件和Button控件,布局如下图:
二 编写代码如下(程序中使用到的gif图片我会在文章后面贴出,你另存到一个test文件夹内,接着把test文件夹拷贝到工程的bin/Debug目录下)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 加载Gif图片
{
public partial class Form1 : Form
{
//多个gif图片的路径集合
string[] PathArray = { "test/1注意基准线.gif", "test/2.gif", "test/3操作子控件提示文本.gif", "test/4改变子控件的高度和位置.gif", "test/5 隐藏和显示提示文本.gif", "test/效果图.gif" };
//用来标识每点击一次按钮,就切换一次gif图片的路径
int count = 0;
MemoryStream ms;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 从指定的路径读取gif图片并转成Image
/// </summary>
/// <param name="GifFilePath">gif图片的路径</param>
/// <returns>转换后的Image</returns>
private Image ConvertGifFileToImage(string GifFilePath)
{
//下面的操作从文件读取到fs流后还要转成ms流呢?因为如果fs流不关闭,下次再读同名的gif文件时就会抛异常
FileStream fs = new FileStream(GifFilePath, FileMode.Open);
byte[] byteArray = new byte[fs.Length];
int result = fs.Read(byteArray, 0, byteArray.Length);
fs.Seek(0, SeekOrigin.Begin);
ms= new MemoryStream(byteArray);
Image img = Image.FromStream(ms);
fs.Dispose();
fs.Close();
return img;
}
/// <summary>
/// 加载按钮点击事件,每点击一次就切换一张gif图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLoad_Click(object sender, EventArgs e)
{
if (ms != null)
{
ms.Dispose();
ms.Close();
}
count = count % 6;
//从指定的路径读取gif图片并转成Image, 为了简单起见,这里的异常就不抓了
Image img = ConvertGifFileToImage(PathArray[count]);
count++;
this.pictureBox1.Image = img;
}
}
}
三 运行效果图如下:
用到的gif图片如下:
图1 : "1注意基准线.gif"
图2 : "2.gif"
图3: "3操作子控件提示文本.gif"
图4: "4改变子控件的高度和位置.gif"
图5: "5 隐藏和显示提示文本.gif"
图6 : "效果图.gif"