社区
C#
帖子详情
如何获得gif帧与帧的延时
华丽的原型
2006-08-31 04:23:11
如题
...全文
474
6
打赏
收藏
如何获得gif帧与帧的延时
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
华丽的原型
2006-11-21
打赏
举报
回复
public static void GetFrame(Image image, ref Image[] frames, ref Int32[] delay)
{
FrameDimension fd = new FrameDimension(image.FrameDimensionsList[0]);
int count = image.GetFrameCount(fd);
frames = new Image[count];
delay = new Int32[count];
System.IO.MemoryStream ms = new System.IO.MemoryStream();
for (int i = 0; i < count; i++)
{
image.SelectActiveFrame(fd, i);
image.Save(ms, ImageFormat.Png);
frames[i] = Image.FromStream(ms);
}
PropertyItem pItem = null;
for (int i = 0; i < image.PropertyIdList.Length; i++)
{
if ((int)image.PropertyIdList.GetValue(i) == 0x5100)
{
pItem = (PropertyItem)image.PropertyItems.GetValue(i);
break;
}
}
byte[] delayByte = new byte[4];
if (pItem != null)
{
for (int i = 0; i < count; i++)
{
//将字节数组转成整型,这里数组大小为4是因为c#里一个整型4字节长
delayByte[0] = pItem.Value[i * 4];
delayByte[1] = pItem.Value[1 + i * 4];
delayByte[2] = pItem.Value[2 + i * 4];
delayByte[3] = pItem.Value[3 + i * 4];
delay[i] = BitConverter.ToInt32(delayByte, 0);
}
}
}
这是一个分解帧的方法,可以获得每一帧和每帧的延时.
获得帧的是PropertyItem,这里的PropertyItem将存放延时数.
图形文件有很多相关信息,如gif的延时,长度等等.这些数据都存放在image.PropertyItems集合里面,其中,只有image.PropertyId为0x5100才是存放延时的数据的.这些信息你可以上msdn上查到,英文的.另外取得的延时数组delay[]比实际的小10倍,即实际延时应该是delay[i]*10
Mittermeyer
2006-09-04
打赏
举报
回复
如果仅仅是为了显示Gif,不需要这么复杂,直接用ImageAnimator就可以了。
http://blog.csdn.net/Mittermeyer/archive/2006/08/28/1131535.aspx
华丽的原型
2006-09-04
打赏
举报
回复
自己解决了,gif文件本身存储有每帧的延时,可以利用PropertyItem取出来
华丽的原型
2006-09-01
打赏
举报
回复
谢谢愚翁的链接,不过里面只有gif的分解.我的目的是把分解后的gif逐帧显示,gif每帧之间肯定有延时,而且是不一样的,这个延时如何获得呢?
Knight94
2006-08-31
打赏
举报
回复
ref:
http://blog.csdn.net/knight94/archive/2006/07/03/871038.aspx
juge001
2006-08-31
打赏
举报
回复
mark
更改
GIF
文件中的
帧
延迟:更改
GIF
文件中的
帧
持续时间-matlab开发
用法change_
gif
_delay(
gif
_file,frame_dur,output) change_
gif
_delay(
gif
_file,frame_dur,输出,覆盖) 输入-
GIF
_FILE:原始
GIF
文件- FRAME_DUR:
帧
持续时间(以秒为单位) - OUTPUT:输出文件名。 如果未指定路径,则将保存在与
GIF
_FILE 相同的文件夹中- OVERWRITE:1(覆盖输出)或0(不覆盖)。 默认值:0
动画组件wsAni
GIF
2.6
功能特点: 1、高效率生成
GIF
动画文件;2、输入多种格式文件,包括BMP,JPG,
GIF
等格式;3、
GIF
帧
延时
自定义;4、属性灵活控制
GIF
输出;5、能够装载并回放动态
GIF
文件;6、获取
帧
信息,删除指定
帧
;7、输出动态
GIF
指定
帧
为静态
GIF
文件;8、按
帧
输出动态
GIF
为静态
GIF
图片 9、从动态
GIF
文件里复制
帧
到另外一个
GIF
指定
帧
里 10、
获得
GIF
的
帧
数及
GIF
的
帧
延迟11、组件用于WEB开发时只需要服务器端注册即可,无须客户端安装。12、性能稳定,消耗系统资极少,无内存泄露;13、可用于asp,vb,vc,vs.net,delphi等开发; 技术支持:QQ:199644181 MSN:wave12com@hotmail.com
【吴刚大讲堂】
GIF
动画设计快速精通标准视频教程
本教程通过PSCC2019详细讲解
GIF
动画制作方法,达到学会制作并生成
GIF
动画的目的。建议新学者可以配合经典版的PS销冠课程https://edu.csdn.net/course/detail/7468从而进行系统学习。
Gif
Play Plugin.unitypackage(Unity
GIF
播放插件)
Unity播放
Gif
的插件(支持透明),很好用,跨平台,支持手机、WebGL。 可以拿到
GIF
中的每一
帧
及其
帧
延时
。 此资源为宣传所用,请去Unity商店搜索购买 版权声明: 如果您下载到了免费资源,那么是您下载的是试用资源, 版本较老,bug未修,效率未优化,未授权,不可商用。 资源代码中包含了授权地址及最新版地址,Unity商店搜索亦可 请根据个人开发者还是集体开发者选择授权。
电脑
GIF
录制工具中文(478KB)
操作 1、在录制的过程中,你可以随意的改变窗口大小、位置。不过在改变过程中软件是会暂停录制的,待你释放窗口后才会继续。 2、如果录制范围内内容无变化,则不增加新
帧
而只是增加
延时
,这样可以有效减小文件尺寸 3、录制停止后,可再次按下 “录制” 继续录制 4、按下 “单
帧
” 可以录制单
帧
:如内容有变化,则形成新的
帧
;如果无变化,则该
帧
增加0.1秒
延时
5、编辑状态下可查看每一
帧
,可以删除
帧
、增加减少当前
帧
延时
6、保存
GIF
图片时,你可以根据需要设置不同的色深和
帧
率(fps) 7、可以全屏录制,可增加文字,可显示/隐藏鼠标指针
C#
110,571
社区成员
642,565
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章