本帖最后由 简单单单 于 2019-5-14 16:45 编辑
软件主要功能:
一:两种代码压缩功能
二:逐帧查看GIF中的图片
三:自定义倍速播放GIF(添加倒放功能)
2019.05.14 修复部分BUG 并添加倒放功能
软件编译大小23kb,VS2015编译,WinGifTool\bin\Debug下WinGifTool.exe可直接运行使用
拖入图片即可显示图片总帧数
软件窗体可放大,如果gif大小显示不全,放大程序窗体再点击预览或者播放即可
代码其实没什么,参考网上资料,做这个软件主要是很小巧的实现看GIF某些帧的图片,不用打开PS才能看
压缩功能可能有噪点
[C#] 纯文本查看 复制代码 /// <summary>
/// 获取指定帧数的图片
/// </summary>
/// <param name="path"></param>
/// <param name="index"></param>
/// <returns></returns>
private Image GetImg(string path, int index)
{
Image res = Image.FromFile(path);
int width = res.Width;
int height = res.Height;
Image gif = new Bitmap(width, height);
Image frame = new Bitmap(width, height);
Graphics g = Graphics.FromImage(gif);
Rectangle rg = new Rectangle(0, 0, width, height);
Graphics gFrame = Graphics.FromImage(frame);
int forIndex = 0;
foreach (Guid gd in res.FrameDimensionsList)
{
FrameDimension fd = new FrameDimension(gd);
//因为是缩小GIF文件所以这里要设置为Time,如果是TIFF这里要设置为PAGE,因为GIF以时间分割,TIFF为页分割
FrameDimension f = FrameDimension.Time;
int count = res.GetFrameCount(fd);
//ImageCodecInfo codecInfo = GetEncoder(ImageFormat.Gif);
//System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
//EncoderParameters eps = null;
for (int i = 0; i < count; i++)
{
res.SelectActiveFrame(f, i);
if (0 == i)
{
if (forIndex == index)
{
g.DrawImage(res, rg);
bindProperty(res, gif);
return gif;
}
//gif.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"/" + Path.GetFileName(path).Replace(".", DateTime.Now.ToString("yyMMddHHmmssfff") + "."), codecInfo, eps);
}
else
{
if (forIndex == index)
{
gFrame.DrawImage(res, rg);
bindProperty(res, frame);
return frame;
}
//gif.SaveAdd(frame, eps);
}
forIndex++;
}
//eps = new EncoderParameters(1);
//eps.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
//gif.SaveAdd(eps);
}
//MessageBox.Show("缩放完成!");
res.Dispose();
return null;
}
蓝奏云无密码
https://www.lanzouj.com/i45l3zi
没有编译环境的同学WinGifTool\bin\Debug下WinGifTool.exe可直接运行使用
|