看一看啦!给大家分享一个C#写的GIF制作工具!!

Trent1985
博客专家认证
2012-11-08 12:19:55
加精
今天,自己做了一个GIF图像生成器,可以实现任意张图像生成GIF,很好用,给大家分享一下,资料搜集来自网络!!!
下面是界面图像和效果实例图:
界面图:

实例图:

接着是源码下载地址:
http://download.csdn.net/detail/trent1985/4745698
部分源代码如下:
       #region variances
private string curFileName = null;
private Bitmap curBitmap = null;
private List<string> pathString = new List<string>();
private List<Bitmap> thumbnailImage = new List<Bitmap>();
private List<Bitmap> srcImage = new List<Bitmap>();
private Bitmap temp = null;
private int count = 0;
private int number = 0;
private int deleteNumber = 0;
#endregion

#region Functions
//Open Function
public void OpenImage()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "所有图像文件 | *.bmp; *.pcx; *.png; *.jpg; *.gif;" +
"*.tif; *.ico; *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf|" +
"位图( *.bmp; *.jpg; *.png;...) | *.bmp; *.pcx; *.png; *.jpg; *.gif; *.tif; *.ico|" +
"矢量图( *.wmf; *.eps; *.emf;...) | *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf";
ofd.ShowHelp = true;
ofd.Title = "打开图像文件";
if (ofd.ShowDialog() == DialogResult.OK)
{
curFileName = ofd.FileName;
try
{
curBitmap = (Bitmap)System.Drawing.Image.FromFile(curFileName);
pathString.Add(curFileName);
srcImage.Add(new Bitmap(curBitmap));
if (curBitmap.Width >= curBitmap.Height)
temp = new Bitmap(curBitmap, new Size(100, (int)(100 * curBitmap.Height / curBitmap.Width)));
else
temp = new Bitmap(curBitmap, new Size((int)(100 * curBitmap.Width / curBitmap.Height), 100));
thumbnailImage.Add(new Bitmap(temp));
count++;
}
catch (Exception exp)
{ MessageBox.Show(exp.Message); }
}
DisplayImages();
}
//Save Function
public void SaveImage()
{
if (imageBox.Image != null)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "(*.gif)|*.gif";
if (sfd.ShowDialog() == DialogResult.OK)
{
if (File.Exists(sfd.FileName))
{
File.Delete(sfd.FileName);
imageBox.Image.Save(sfd.FileName);
}
else
imageBox.Image.Save(sfd.FileName);
}
}
else
{
MessageBox.Show("Please open an image!");
}
}

//Display function
private void DisplayImages()
{
listView1.Clear();
imageList1.Images.Clear();
if (count != 0)
{
for (int i = 0; i < count; i++)
{
imageList1.ColorDepth = ColorDepth.Depth24Bit;
imageList1.ImageSize = new Size(thumbnailImage.ElementAt(i).Width, thumbnailImage.ElementAt(i).Height);
imageList1.Images.Add((Image)thumbnailImage.ElementAt(i));
listView1.LargeImageList = imageList1;
listView1.Items.Add(i.ToString());
listView1.Items[i].ImageIndex = i;
}
}

}
#endregion

#region Others
private void trackBar1_Scroll(object sender, EventArgs e)
{
label1.Text = "Time interval:"+trackBar1.Value.ToString()+"ms";
}

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenImage();
}

private void convertToGifToolStripMenuItem_Click(object sender, EventArgs e)
{
String outputPath = "C:\\"+number.ToString ()+".gif";
if (File.Exists(outputPath))
{
imageBox.Image = null;
number++;
outputPath = "C:\\" + number.ToString() + ".gif";
}
AnimatedGifEncoder gif = new AnimatedGifEncoder();
gif.Start(outputPath);
gif.SetDelay(trackBar1.Value);
gif.SetRepeat(0);
for (int i = 0; i < count; i++)
{
gif.AddFrame(srcImage.ElementAt(i));
}
gif.Finish();
imageBox.Image = (Image)Image.FromFile(outputPath);
imageBox.Width = srcImage.ElementAt(0).Width;
imageBox.Height = srcImage.ElementAt(0).Height;
MessageBox.Show("Done!");
}

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveImage();
}

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
pathString.RemoveAt(deleteNumber);
thumbnailImage.RemoveAt(deleteNumber);
srcImage.RemoveAt(deleteNumber);
count--;
DisplayImages();
}

private void listView1_MouseDown(object sender, MouseEventArgs e)
{
if (listView1.HitTest(e.X, e.Y).Item != null)
{
deleteNumber = listView1.HitTest(e.X, e.Y).Item.Index;
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Visible = true;
}
}
}

private void blogLinkToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("IEXPLORE.EXE", "http://dongtingyueh.blog.163.com/");
}
#endregion
...全文
13402 263 打赏 收藏 转发到动态 举报
写回复
用AI写文章
263 条回复
切换为时间正序
请发表友善的回复…
发表回复
loulou的ACM 2015-05-06
  • 打赏
  • 举报
回复
哈哈。感谢楼主分享~~学习了
why123qaz 2015-04-27
  • 打赏
  • 举报
回复
留言,学习。
csharpSun 2014-05-05
  • 打赏
  • 举报
回复
非常不错哟,很好。
csharpSun 2014-05-05
  • 打赏
  • 举报
回复
太强了,强烈支持。
sjq2mm 2013-11-26
  • 打赏
  • 举报
回复
abcayad 2013-11-05
  • 打赏
  • 举报
回复
同测, 好用! 可惜用了Pinvoke 不能在mono上跨平台啊 求跨平台的调色板优化方法啊!!
casolxia 2013-11-04
  • 打赏
  • 举报
回复
收藏,支持原创,分享,哈哈哈
xiexie01 2013-11-01
  • 打赏
  • 举报
回复
未能找到类型或命名空间名称“AnimatedGifEncoder”(是否缺少 using 指令或程序集引用?) imageBox缺少定义 怎么改正啊,求救
xdlidong 2013-10-17
  • 打赏
  • 举报
回复
最近突然被boss召唤写这个,以前都没接触过,学习了
yanyan1577127971 2012-12-11
  • 打赏
  • 举报
回复
收藏了,顶顶顶顶顶顶顶顶
viki117 2012-12-10
  • 打赏
  • 举报
回复
收藏。。。。。。。。。。。。。
Trent1985 2012-12-10
  • 打赏
  • 举报
回复
结贴喽。。。
LAONINGA098 2012-11-23
  • 打赏
  • 举报
回复
收藏了,顶。
睡不好 2012-11-23
  • 打赏
  • 举报
回复
很好 学习了
-逗你玩儿- 2012-11-23
  • 打赏
  • 举报
回复
什么都搞点 2012-11-23
  • 打赏
  • 举报
回复
好东西!!!!!顶!
happytonice 2012-11-23
  • 打赏
  • 举报
回复
分享精神可嘉
zhaoshibojh 2012-11-23
  • 打赏
  • 举报
回复
顶啊
xiaoxu_1 2012-11-23
  • 打赏
  • 举报
回复
看了,挺好的!嘿嘿。。。
lengejun 2012-11-22
  • 打赏
  • 举报
回复
菜鸟路过虽然不懂但是感觉很强大
加载更多回复(221)

110,539

社区成员

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

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

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