为gif动画添加水印-有具体实现[2008-02-15日更新]

更新:有了改善了性能的具体实现。速度提升几百倍

更新:早晨的版本在计算格帧之间时间延迟上有错误,现更正,纠正了动画变快或者变慢的问题

2007年,曾发过两篇解决为gif动画添加水印的文章,分别为:
给gif动画添加水印的初步实现
改善了性能的gif动画添加水印
当时,没有将完整的实现放上来,过去的一年中,陆陆续续的接到好多朋友的邮件,希望能发一份完整的实现,但由于移动硬盘毁坏,原来的代码已经找不到了,一直没能给大家一个很好的回复,深表歉意,现在将完整的程序重新实现了一遍,速度比较慢的,但思路基本有了,希望能给大家一个交待。
原图片:

水印后:


比去年版本的改进:
1)解决了各帧之间间隔变快的问题
未解决的问题
1)效率问题(2008-02-15已有更新,有了改善性能后的具体实现,速度提升几百倍
2)透明背景的处理

项目文件:
/Files/jillzhang/Gif.rar
改善性能后的具体实现:/Files/jillzhang/Gif_Faster.rar

更新:早晨的版本在计算格帧之间时间延迟上有错误,现更正,纠正了动画变快或者变慢的问题

纠正后版本:/Files/jillzhang/Gif_Faster_LastEdited.rar (最新 2008-02-15 17:49)

原来错误的将
int delay = ora_Img.GetPropertyItem(20736).Value[i]
其实ora_Img.GetPropertyItem(20736).Value获得的是1个byte[],这个数组中每四位代表1个delay值。
现已经更正为 int delay = BitConverter.ToInt32(buffer, i * 4);

posted @ 2008-02-14 18:02  Robin Zhang  阅读(6606)  评论(38编辑  收藏  举报