c# Base64編碼和圖片的互相轉(zhuǎn)換代碼
事出有因
我們已經(jīng)做了一個(gè)編輯器,這個(gè)編輯器可以以xml格式存儲(chǔ)一些信息。在存儲(chǔ)圖片信息時(shí)我們碰到了一些問題。我們本來在xml信息中存儲(chǔ)的是圖片的路徑,然而一旦客戶把這個(gè)信息copy到其他電腦上而沒有同時(shí)copy相關(guān)的圖片時(shí),就會(huì)出現(xiàn)一些問題。
后來,我們把圖片數(shù)據(jù)轉(zhuǎn)換為Base64編碼,替代了原先存儲(chǔ)圖片路徑的方式。
轉(zhuǎn)換流程
將圖片轉(zhuǎn)化為Base64字符串的流程是:首先使用BinaryFormatter將圖片文件序列化為二進(jìn)制數(shù)據(jù),然后使用Convert類的ToBase64String方法。將Base64字符串轉(zhuǎn)換為圖片的流程正好相反:使用Convert類的FromBase64String得到圖片文件的二進(jìn)制數(shù)據(jù),然后使用BinaryFormatter反序列化方法。
/// <summary>
/// 將圖片數(shù)據(jù)轉(zhuǎn)換為Base64字符串
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToBase64(object sender, EventArgs e)
{
Image img = this.pictureBox.Image;
BinaryFormatter binFormatter = new BinaryFormatter();
MemoryStream memStream = new MemoryStream();
binFormatter.Serialize(memStream, img);
byte[] bytes = memStream.GetBuffer();
string base64 = Convert.ToBase64String(bytes);
this.richTextBox.Text = base64;
}
/// <summary>
/// 將Base64字符串轉(zhuǎn)換為圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToImage(object sender, EventArgs e)
{
string base64 = this.richTextBox.Text;
byte[] bytes = Convert.FromBase64String(base64);
MemoryStream memStream = new MemoryStream(bytes);
BinaryFormatter binFormatter = new BinaryFormatter();
Image img = (Image)binFormatter.Deserialize(memStream);
this.pictureBox.Image = img;
}
運(yùn)行結(jié)果


- C# 圖片與Base64碼的相互轉(zhuǎn)化問題(代碼詳解)
- c#和java base64不一致的解決方法
- C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作示例
- C#實(shí)現(xiàn)Base64處理的加密解密,編碼解碼示例
- C#編寫的Base64加密和解密類
- C#解碼base64編碼二進(jìn)制數(shù)據(jù)的方法
- asp.C#實(shí)現(xiàn)圖片文件與base64string編碼解碼
- c# 實(shí)現(xiàn)文件上傳下載功能的實(shí)例代碼
- C#實(shí)現(xiàn)的文件上傳下載工具類完整實(shí)例【上傳文件自動(dòng)命名】
- C# 文件上傳下載(Excel導(dǎo)入,多線程下載)功能的實(shí)現(xiàn)代碼
- C#實(shí)現(xiàn)Web文件上傳的兩種方法實(shí)例代碼
- c# 用Base64實(shí)現(xiàn)文件上傳
相關(guān)文章
一步步教你如何創(chuàng)建第一個(gè)C#項(xiàng)目
這篇文章主要給大家介紹了關(guān)于如何創(chuàng)建第一個(gè)C#項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-12-12
C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法示例
這篇文章主要介紹了C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C#計(jì)時(shí)器的簡(jiǎn)單定義與使用技巧,需要的朋友可以參考下2017-05-05
C#?Sqlite數(shù)據(jù)庫(kù)的搭建及使用技巧
這篇文章主要介紹了C#?Sqlite數(shù)據(jù)庫(kù)的搭建及使用技巧,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
WPF實(shí)現(xiàn)Table布局控件的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用WPF實(shí)現(xiàn)Table布局控件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10
C#高效比較兩個(gè)DataTable數(shù)據(jù)差異化的方法實(shí)現(xiàn)
本文主要介紹了C#高效比較兩個(gè)DataTable數(shù)據(jù)差異化的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
WinForm使用DecExpress控件中的ChartControl插件繪制圖表
這篇文章介紹了WinForm使用DecExpress控件中的ChartControl插件繪制圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05

