Winform中實現(xiàn)圖片格式轉(zhuǎn)換
更新時間:2020年12月23日 15:59:49 作者:霸道流氓
這篇文章主要介紹了Winform中實現(xiàn)圖片格式轉(zhuǎn)換的示例代碼,幫助大家更好的理解和使用winform開發(fā),感興趣的朋友可以了解下
場景
選擇一張照片并選擇保存位置和要轉(zhuǎn)換的圖片格式實現(xiàn)圖片格式轉(zhuǎn)換。
項目運行效果
實現(xiàn)
新建一個窗體頁面,然后設計頁面布局如下
選擇圖片按鈕點擊事件中
private void toolStripButton3_Click(object sender, EventArgs e)//選擇轉(zhuǎn)換文件的按鈕 { if (openFileDialog1.ShowDialog() == DialogResult.OK) //判斷是否選擇文件 { listView1.Items.Clear(); //清空listView1 string[] info = new string[7]; //存儲每一行數(shù)據(jù) FileInfo fi; //創(chuàng)建一個FileInfo對象,用于獲取圖片信息 path1 = openFileDialog1.FileNames; //獲取選擇的圖片集合 for (int i = 0; i < path1.Length; i++) //讀取集合中的內(nèi)容 { //獲取圖片名稱 string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); //獲取圖片類型 string ImgType = ImgName.Substring(ImgName.LastIndexOf(".") + 1, ImgName.Length - ImgName.LastIndexOf(".") - 1); fi = new FileInfo(path1[i].ToString()); //實例化FileInfo對象 //將每一行數(shù)據(jù)第一個位置的圖標添加到imageList1中 imageList1.Images.Add(ImgName,Properties.Resources.圖標__23_); info[1] = ImgName; //圖片名稱 info[2] = ImgType; //圖片類型 info[3] = fi.LastWriteTime.ToShortDateString();//圖片最后修改日期 info[4] = path1[i].ToString(); //圖片位置 info[5] = (fi.Length/1024)+"KB"; //圖片大小 info[6] = "未轉(zhuǎn)換"; //圖片狀態(tài) ListViewItem lvi = new ListViewItem(info, ImgName); //實例化ListViewItem對象 listView1.Items.Add(lvi); //將信息添加到listView1控件中 } tsslFileNum.Text = "當前共有" + path1.Length.ToString() + "個文件";//狀態(tài)欄中顯示圖片數(shù)量 } }
選擇圖片保存位置按鈕點擊事件
private void toolStripButton4_Click(object sender, EventArgs e)//選擇保存路徑按鈕 { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) //判斷是否選擇保存路徑 { path2 = folderBrowserDialog1.SelectedPath; //獲取保存路徑 } }
開始轉(zhuǎn)換按鈕點擊事件
private void toolStripButton1_Click(object sender, EventArgs e) { if (path1 == null) //判斷是否選擇圖片 { MessageBox.Show("請選擇圖片!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (path2.Length == 0) //判斷是否選擇保存位置 { MessageBox.Show("請選擇保存位置!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { flags = 1; //初始化flags變量為1,用于計算進度 toolStrip1.Enabled = false; //當轉(zhuǎn)換開始時,禁用工具欄 int flag = tscbType.SelectedIndex; //判斷將圖片轉(zhuǎn)換為何種格式 switch (flag) //根據(jù)不同的格式進行轉(zhuǎn)換 { case 0: Imgtype1 = 0; //如果選擇第一項則轉(zhuǎn)換為BMP格式 td = new Thread(new ThreadStart(ConvertImage)); //通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 1: //如果選擇第二項則轉(zhuǎn)換為JPG格式 Imgtype1 = 1; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 2: //如果選擇第三項則轉(zhuǎn)換為PNG格式 Imgtype1 = 2; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 3: //如果選擇第四項則轉(zhuǎn)換為GIF格式 Imgtype1 = 3; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; default: td.Abort(); break; } } } }
完整窗體頁面代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Threading; namespace PictureBatchConversion { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string[] path1=null; //用于存儲選擇的文件列表 string path2=""; //用于存儲保存的路徑 Bitmap bt; //聲明一個轉(zhuǎn)換圖片格式的Bitmap對象 Thread td; //聲明一個線程 int Imgtype1; //聲明一個變量用于標記ConvertImage方法中轉(zhuǎn)換的類型 string OlePath; //聲明一個變量用于存儲ConvertImage方法中原始圖片的路徑 string path; //聲明一個變量用于存儲ConvertImage方法中轉(zhuǎn)換后圖片的保存路徑 int flags; //用于標記已轉(zhuǎn)換圖片的數(shù)量,用于計算轉(zhuǎn)換進度 private void Form2_Load(object sender, EventArgs e) { tscbType.SelectedIndex = 0; //設置第一個轉(zhuǎn)換類型被選中 CheckForIllegalCrossThreadCalls = false;//屏蔽線程彈出的錯誤提示 } private void toolStripButton3_Click(object sender, EventArgs e)//選擇轉(zhuǎn)換文件的按鈕 { if (openFileDialog1.ShowDialog() == DialogResult.OK) //判斷是否選擇文件 { listView1.Items.Clear(); //清空listView1 string[] info = new string[7]; //存儲每一行數(shù)據(jù) FileInfo fi; //創(chuàng)建一個FileInfo對象,用于獲取圖片信息 path1 = openFileDialog1.FileNames; //獲取選擇的圖片集合 for (int i = 0; i < path1.Length; i++) //讀取集合中的內(nèi)容 { //獲取圖片名稱 string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); //獲取圖片類型 string ImgType = ImgName.Substring(ImgName.LastIndexOf(".") + 1, ImgName.Length - ImgName.LastIndexOf(".") - 1); fi = new FileInfo(path1[i].ToString()); //實例化FileInfo對象 //將每一行數(shù)據(jù)第一個位置的圖標添加到imageList1中 imageList1.Images.Add(ImgName,Properties.Resources.圖標__23_); info[1] = ImgName; //圖片名稱 info[2] = ImgType; //圖片類型 info[3] = fi.LastWriteTime.ToShortDateString();//圖片最后修改日期 info[4] = path1[i].ToString(); //圖片位置 info[5] = (fi.Length/1024)+"KB"; //圖片大小 info[6] = "未轉(zhuǎn)換"; //圖片狀態(tài) ListViewItem lvi = new ListViewItem(info, ImgName); //實例化ListViewItem對象 listView1.Items.Add(lvi); //將信息添加到listView1控件中 } tsslFileNum.Text = "當前共有" + path1.Length.ToString() + "個文件";//狀態(tài)欄中顯示圖片數(shù)量 } } private void toolStripButton2_Click(object sender, EventArgs e) //關(guān)閉按鈕 { Application.Exit(); //退出系統(tǒng) } private void toolStripButton5_Click(object sender, EventArgs e) //清空列表的按鈕 { listView1.Items.Clear(); //清空列表 path1 = null; //清空圖片的集合 tsslFileNum.Text = "當前沒有文件"; //狀態(tài)欄中提示 tsslPlan.Text = ""; //清空進度數(shù)字 } private void toolStripButton1_Click(object sender, EventArgs e) { if (path1 == null) //判斷是否選擇圖片 { MessageBox.Show("請選擇圖片!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (path2.Length == 0) //判斷是否選擇保存位置 { MessageBox.Show("請選擇保存位置!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { flags = 1; //初始化flags變量為1,用于計算進度 toolStrip1.Enabled = false; //當轉(zhuǎn)換開始時,禁用工具欄 int flag = tscbType.SelectedIndex; //判斷將圖片轉(zhuǎn)換為何種格式 switch (flag) //根據(jù)不同的格式進行轉(zhuǎn)換 { case 0: Imgtype1 = 0; //如果選擇第一項則轉(zhuǎn)換為BMP格式 td = new Thread(new ThreadStart(ConvertImage)); //通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 1: //如果選擇第二項則轉(zhuǎn)換為JPG格式 Imgtype1 = 1; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 2: //如果選擇第三項則轉(zhuǎn)換為PNG格式 Imgtype1 = 2; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; case 3: //如果選擇第四項則轉(zhuǎn)換為GIF格式 Imgtype1 = 3; td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進行轉(zhuǎn)換 td.Start(); break; default: td.Abort(); break; } } } } private void toolStripButton4_Click(object sender, EventArgs e)//選擇保存路徑按鈕 { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) //判斷是否選擇保存路徑 { path2 = folderBrowserDialog1.SelectedPath; //獲取保存路徑 } } private void ConvertImage() { flags = 1; switch (Imgtype1) { case 0: for (int i = 0; i < path1.Length; i++) { string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); ImgName = ImgName.Remove(ImgName.LastIndexOf(".")); OlePath = path1[i].ToString(); bt = new Bitmap(OlePath); path = path2 + "\\" + ImgName + ".bmp"; bt.Save(path, System.Drawing.Imaging.ImageFormat.Bmp); listView1.Items[flags - 1].SubItems[6].Text = "已轉(zhuǎn)換"; tsslPlan.Text = "正在轉(zhuǎn)換"+flags*100/path1.Length+"%"; if (flags == path1.Length) { toolStrip1.Enabled = true; tsslPlan.Text = "圖片轉(zhuǎn)換全部完成"; } flags++; } break; case 1: for (int i = 0; i < path1.Length; i++) { string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); ImgName = ImgName.Remove(ImgName.LastIndexOf(".")); OlePath = path1[i].ToString(); bt = new Bitmap(OlePath); path = path2 + "\\" + ImgName + ".jpeg"; bt.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg); listView1.Items[flags - 1].SubItems[6].Text = "已轉(zhuǎn)換"; tsslPlan.Text = "正在轉(zhuǎn)換" + flags * 100 / path1.Length + "%"; if (flags == path1.Length) { toolStrip1.Enabled = true; tsslPlan.Text = "圖片轉(zhuǎn)換全部完成"; } flags++; } break; case 2: for (int i = 0; i < path1.Length; i++) { string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); ImgName = ImgName.Remove(ImgName.LastIndexOf(".")); OlePath = path1[i].ToString(); bt = new Bitmap(OlePath); path = path2 + "\\" + ImgName + ".png"; bt.Save(path, System.Drawing.Imaging.ImageFormat.Png); listView1.Items[flags - 1].SubItems[6].Text = "已轉(zhuǎn)換"; tsslPlan.Text = "正在轉(zhuǎn)換" + flags * 100 / path1.Length + "%"; if (flags == path1.Length) { toolStrip1.Enabled = true; tsslPlan.Text = "圖片轉(zhuǎn)換全部完成"; } flags++; } break; case 3: for (int i = 0; i < path1.Length; i++) { string ImgName = path1[i].Substring(path1[i].LastIndexOf("\\") + 1, path1[i].Length - path1[i].LastIndexOf("\\") - 1); ImgName = ImgName.Remove(ImgName.LastIndexOf(".")); OlePath = path1[i].ToString(); bt = new Bitmap(OlePath); path = path2 + "\\" + ImgName + ".gif"; bt.Save(path, System.Drawing.Imaging.ImageFormat.Gif); listView1.Items[flags - 1].SubItems[6].Text = "已轉(zhuǎn)換"; tsslPlan.Text = "正在轉(zhuǎn)換" + flags * 100 / path1.Length + "%"; if (flags == path1.Length) { toolStrip1.Enabled = true; tsslPlan.Text = "圖片轉(zhuǎn)換全部完成"; } flags++; } break; default: bt.Dispose(); break; } } private void Form2_FormClosed(object sender, FormClosedEventArgs e)//關(guān)閉窗口時要關(guān)閉線程 { if (td != null) //判斷是否存在線程 { if (td.ThreadState == ThreadState.Running) //然后判斷線程是否正在運行 { td.Abort(); //如果運行則關(guān)閉線程 } } } } }
以上就是Winform中實現(xiàn)圖片格式轉(zhuǎn)換的詳細內(nèi)容,更多關(guān)于Winform 圖片格式轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- c# winform 解決PictureBox 無法打印全部圖片的問題
- Winform應用程序如何使用自定義的鼠標圖片
- C# Winform按鈕中圖片實現(xiàn)左圖右字的效果實例
- C# WinForm 登錄界面的圖片驗證碼(區(qū)分大小寫+不區(qū)分大小寫)
- C# WinForm實現(xiàn)圖片瀏覽器
- WinForm實現(xiàn)的圖片拖拽與縮放功能示例
- WinForm中實現(xiàn)picturebox自適應圖片大小的方法
- C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法
- Winform下實現(xiàn)圖片切換特效的方法
- 基于C# winform實現(xiàn)圖片上傳功能的方法
相關(guān)文章
c# 實現(xiàn)MD5,SHA1,SHA256,SHA512等常用加密算法源代碼
c# 如何實現(xiàn)MD5,SHA1,SHA256,SHA512等常用加密算法,需要的朋友可以參考下2012-12-12Unity實現(xiàn)Flappy Bird游戲開發(fā)實戰(zhàn)
這篇文章主要為大家詳細介紹了Unity實現(xiàn)Flappy Bird游戲開發(fā)實戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12