利用C#实现分割GIF图片
作者:Csharp小记 发布时间:2021-06-15 16:16:41
标签:C#,分割,GIF,图片
文章描述
弱水三千,我只取一瓢饮。一张动图,我只想要其中一帧。如何将一个GIF动态图分割成一帧一帧的图片?其实现在这样的工具随处可见,无论是在手机自带的相册中还是电脑上的照片查看软件,大部分都集成了图片编辑的功能,实在没有,从网上也能搜罗下来一大堆软件。所以真的想要拿到我们需要的某一帧图片的话,真的易如反掌。
同样的,我们使用C#代码实现起来的话,也是相当简单(不得不说,是真的简单,简单到我这篇还得想尽一切办法来凑字数。我已经不知道我是来分享技术文章的,还是来叙事的,亦或是来抒情的。)
开发环境
.NET Framework版本:4.5
开发工具
Visual Studio 2013
实现代码
private void btn_load_Click(object sender, EventArgs e)
{
Image img = Image.FromFile(textBox1.Text);
lb_img.Image = img;
}
private void btn_split_Click(object sender, EventArgs e)
{
string savePath = Application.StartupPath + "\\images\\";
if (Directory.Exists(savePath))
{
Directory.Delete(savePath, true);
}
Directory.CreateDirectory(savePath);
Image img = lb_img.Image;
//FrameDimension frameDim = new FrameDimension(img.FrameDimensionsList[0]);
int frame = img.GetFrameCount(FrameDimension.Time);
while (frame-- > 0)
{
img.SelectActiveFrame(FrameDimension.Time, frame);
img.Save(savePath + "frame_" + frame + ".jpg", ImageFormat.Jpeg);
}
if (MessageBox.Show("GIF分割完成,是否打开文件夹?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Process.Start(savePath);
}
}
实现效果
代码解析:可以看到的是,以上代码量并不多。其中最重要的只有三行代码,也就是用来分割的代码。但是这里再稍微介绍一下关于gif动态图如何在页面上显示的,本程序中是使用了lable控件来加载动态图的,首先需要先将AutoSize属性设置为false,然后设置Dock属性为Fill。最后给Image属性赋值读取到的Image对象即可。
来源:https://mp.weixin.qq.com/s/aR-1RhS9HPOO8UKPlsA5TA


猜你喜欢
- select 相当于 for 循环select id from IDArrayLinkedList a = new LinkedList()
- 这篇文章主要介绍了Spring如何在一个事务中开启另一个事务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 一. switch分支结构1. 简介switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个
- 一个应用场景,浏览器上传一个文件,此文件后台调用文件转换,需要耗费相当长的时间,这样,如果是一个线程同步式的做下去,那么用户在浏览器上感觉就
- //Main:using System;using System.Collections.Generic;using System.Linq
- 一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应
- 目录 - JWT- JWT与其它的区别OAuthCookie/Session Auth- JWT的优点- 认证- JWT的缺点-
- 在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播 * (Broadcast Reciver
- JDK * ,代理接口没有实现类,实现 * JDK代理,代理的是接口,那么笔者想一想,既然代理的是接口,那如果没有实现类怎么办,能不能代
- idea 鼠标悬浮显示详情2020 版 idea 之前file -> settings设置如下 2020 版 idea 之后
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- 我们在使用一些开源调度系统(比如:elastic-job等)的时候,对于任务的执行时间通常都是有规律性的,可能是每隔半小时执行一次,或者每天
- 前言现在不少应用都是采用了混合开发模式,不论是原生加RN,或是原生加Flutter,或是原生加H5。原生实现主业务线,其他部分可以借助跨平台
- @Scheduled多个任务同时开始执行只需在springBoot启动类上添加如下代码即可:@Bean publi
- 本文实例讲述了Android开发实现跟随手指的小球效果。分享给大家供大家参考,具体如下:配置DrawView类用于绘制小球public cl
- 本文实例讲述了C#修改IIS站点framework版本号的方法。分享给大家供大家参考。具体如下:使用ASP.NET IIS 注册工具 (As
- 使用工具:IDEA2022Tomcat9.0.41.下载Tomcat:官网:https://tomcat.apache.org/找到需要的版
- C# 中闭包(Closure)详解这个问题是在最近一次英格兰 Brighton ALT.NET Beers 活动中提出来的。我发现,如果不用
- 介绍原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建
- 本文实例为大家分享了C#语言使用Unity实现剪刀石头布游戏的具体代码,供大家参考,具体内容如下游戏:剪刀石头布实现功能:1、电脑随机出牌(