C#實(shí)現(xiàn)合并多張圖片為GIF動(dòng)態(tài)圖
文章描述
在前一篇寫了如何將一張GIF動(dòng)態(tài)圖分解成一幀一幀的圖片,這一篇我們就把喝進(jìn)去的一瓢水給還回去。即把一張又一張的圖片去拼合成一張GIF動(dòng)態(tài)圖。
這里我們使用的是上一篇分割下來(lái)的每一幀圖片,然后來(lái)進(jìn)行一個(gè)還原操作,其實(shí)下面的代碼中,能做到也不僅僅是還原,還可以同時(shí)設(shè)置延遲間隔等一些屬性,也就是對(duì)這張動(dòng)態(tài)圖進(jìn)行慢放或者快放的操作。

開發(fā)環(huán)境
.NET Framework版本:4.5
開發(fā)工具
Visual Studio 2013
實(shí)現(xiàn)代碼
string newPath = Application.StartupPath + "\\new.gif";
public Form1()
{
InitializeComponent();
textBox1.Text = Application.StartupPath + "\\images\\";
}
private void btn_merge_Click(object sender, EventArgs e)
{
List<string> imgs = Directory.GetFiles(textBox1.Text, "*.jpg").ToList();
imgs.Sort((a, b) =>
{
string reg = "[0-9]+";
int a_index = int.Parse(Regex.Match(a, reg).Value);
int b_index = int.Parse(Regex.Match(b, reg).Value);
return a_index > b_index ? 1 : a_index < b_index ? -1 : 0;
});
AnimatedGifEncoder ae = new AnimatedGifEncoder();
ae.Start(newPath);
ae.SetDelay(120); // 延遲間隔
ae.SetRepeat(0); //-1:不循環(huán),0:循環(huán)播放
for (int i = 0; i < imgs.Count; i++)
{
ae.AddFrame(Image.FromFile(imgs[i]));
}
ae.Finish();
MessageBox.Show("處理完成,請(qǐng)點(diǎn)擊預(yù)覽查看");
}
private void btn_preview_Click(object sender, EventArgs e)
{
Image img = Image.FromFile(newPath);
lb_img.Image = img;
}實(shí)現(xiàn)效果

代碼解析
看代碼是不是又是挺簡(jiǎn)單的?又是幾行代碼?其實(shí)不然,這里使用到了一套開源的代碼(AnimatedGif還是什么來(lái)著,年代有點(diǎn)久遠(yuǎn),記不太清了,只知道代碼里面是這么寫的,應(yīng)該根據(jù)這個(gè)關(guān)鍵詞時(shí)可以搜索到的),不過(guò)也全是c#代碼寫的,但是太多就沒(méi)放到文章中來(lái)。
在上一篇中,進(jìn)行GIF動(dòng)態(tài)圖片分割的時(shí)候,可以看到對(duì)每一張圖片保存命名的時(shí)候進(jìn)行了編號(hào),所以這里合成的時(shí)候,就要按照編號(hào)(幀)排序再合成(由于我命名時(shí)加了其他字符串,所以這里又用正則處理了下),這里注意一定不能亂排,否則圖片播放器來(lái)不太連貫。當(dāng)然你需求就是一張張無(wú)序播放的話,倒是無(wú)所謂。
到此這篇關(guān)于C#實(shí)現(xiàn)合并多張圖片為GIF動(dòng)態(tài)圖的文章就介紹到這了,更多相關(guān)C#合并圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 正則判斷一個(gè)數(shù)字的格式是否有逗號(hào)的代碼
c#正則判斷一個(gè)格式化數(shù)字里是否有逗號(hào)的解決方法2008-07-07
c#菜單動(dòng)態(tài)合并的實(shí)現(xiàn)方法
這篇文章主要介紹了c#菜單動(dòng)態(tài)合并的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
C#實(shí)現(xiàn)將Email地址轉(zhuǎn)成圖片顯示的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將Email地址轉(zhuǎn)成圖片顯示的方法,涉及C#操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C# readnodefile()不能讀取帶有文件名為漢字的osg文件解決方法
這篇文章主要介紹了C# readnodefile()不能讀取帶有文件名為漢字的osg文件解決方法,需要的朋友可以參考下2015-09-09
VS2017使用Git進(jìn)行源代碼管理的實(shí)現(xiàn)
這篇文章主要介紹了VS2017使用Git進(jìn)行源代碼管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫(kù)中讀取頭像
C#提供的PictureBox控鍵默認(rèn)情況下是方形的非常大的影響美觀,怎么解決這一問(wèn)題呢?下面小編給大家?guī)?lái)了C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫(kù)中讀取頭像的操作代碼,感興趣的朋友一起學(xué)習(xí)下吧2021-08-08
C#使用DropDownList綁定添加新數(shù)據(jù)的方法匯總
這篇文章主要介紹了C#使用DropDownList綁定添加新數(shù)據(jù)的方法匯總的相關(guān)資料,需要的朋友可以參考下2016-03-03

