使用C#編寫一個(gè)圖片格式批量轉(zhuǎn)換工具
更新時(shí)間:2026年02月09日 08:55:25 作者:biyusr
本文介紹了一個(gè)使用C#編寫的圖片格式批量轉(zhuǎn)換工具,支持BMP、JPG、PNG和GIF格式,通過線程并行處理,同時(shí)展示文件選擇、保存路徑設(shè)置及轉(zhuǎn)換進(jìn)度實(shí)時(shí)更新,需要的朋友可以參考下
1.C#批量圖片格式轉(zhuǎn)換
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; //用于存儲(chǔ)選擇的文件列表
string path2=""; //用于存儲(chǔ)保存的路徑
Bitmap bt; //聲明一個(gè)轉(zhuǎn)換圖片格式的Bitmap對(duì)象
Thread td; //聲明一個(gè)線程
int Imgtype1; //聲明一個(gè)變量用于標(biāo)記ConvertImage方法中轉(zhuǎn)換的類型
string OlePath; //聲明一個(gè)變量用于存儲(chǔ)ConvertImage方法中原始圖片的路徑
string path; //聲明一個(gè)變量用于存儲(chǔ)ConvertImage方法中轉(zhuǎn)換后圖片的保存路徑
int flags; //用于標(biāo)記已轉(zhuǎn)換圖片的數(shù)量,用于計(jì)算轉(zhuǎn)換進(jìn)度
private void Form2_Load(object sender, EventArgs e)
{
tscbType.SelectedIndex = 0; //設(shè)置第一個(gè)轉(zhuǎn)換類型被選中
CheckForIllegalCrossThreadCalls = false;//屏蔽線程彈出的錯(cuò)誤提示
}
private void toolStripButton3_Click(object sender, EventArgs e)//選擇轉(zhuǎn)換文件的按鈕
{
if (openFileDialog1.ShowDialog() == DialogResult.OK) //判斷是否選擇文件
{
listView1.Items.Clear(); //清空listView1
string[] info = new string[7]; //存儲(chǔ)每一行數(shù)據(jù)
FileInfo fi; //創(chuàng)建一個(gè)FileInfo對(duì)象,用于獲取圖片信息
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()); //實(shí)例化FileInfo對(duì)象
//將每一行數(shù)據(jù)第一個(gè)位置的圖標(biāo)添加到imageList1中
imageList1.Images.Add(ImgName,Properties.Resources.圖標(biāo)__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); //實(shí)例化ListViewItem對(duì)象
listView1.Items.Add(lvi); //將信息添加到listView1控件中
}
tsslFileNum.Text = "當(dāng)前共有" + path1.Length.ToString() + "個(gè)文件";//狀態(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; //清空?qǐng)D片的集合
tsslFileNum.Text = "當(dāng)前沒有文件"; //狀態(tài)欄中提示
tsslPlan.Text = ""; //清空進(jìn)度數(shù)字
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (path1 == null) //判斷是否選擇圖片
{
MessageBox.Show("請(qǐng)選擇圖片!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (path2.Length == 0) //判斷是否選擇保存位置
{
MessageBox.Show("請(qǐng)選擇保存位置!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
flags = 1; //初始化flags變量為1,用于計(jì)算進(jìn)度
toolStrip1.Enabled = false; //當(dāng)轉(zhuǎn)換開始時(shí),禁用工具欄
int flag = tscbType.SelectedIndex; //判斷將圖片轉(zhuǎn)換為何種格式
switch (flag) //根據(jù)不同的格式進(jìn)行轉(zhuǎn)換
{
case 0:
Imgtype1 = 0; //如果選擇第一項(xiàng)則轉(zhuǎn)換為BMP格式
td = new Thread(new ThreadStart(ConvertImage)); //通過線程調(diào)用ConvertImage方法進(jìn)行轉(zhuǎn)換
td.Start();
break;
case 1: //如果選擇第二項(xiàng)則轉(zhuǎn)換為JPG格式
Imgtype1 = 1;
td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進(jìn)行轉(zhuǎn)換
td.Start();
break;
case 2: //如果選擇第三項(xiàng)則轉(zhuǎn)換為PNG格式
Imgtype1 = 2;
td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進(jìn)行轉(zhuǎn)換
td.Start();
break;
case 3: //如果選擇第四項(xiàng)則轉(zhuǎn)換為GIF格式
Imgtype1 = 3;
td = new Thread(new ThreadStart(ConvertImage));//通過線程調(diào)用ConvertImage方法進(jìn)行轉(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)閉窗口時(shí)要關(guān)閉線程
{
if (td != null) //判斷是否存在線程
{
if (td.ThreadState == ThreadState.Running) //然后判斷線程是否正在運(yùn)行
{
td.Abort(); //如果運(yùn)行則關(guān)閉線程
}
}
}
}
}
2.顯示效果

以上就是使用C#編寫一個(gè)圖片格式批量轉(zhuǎn)換工具的詳細(xì)內(nèi)容,更多關(guān)于C#圖片格式轉(zhuǎn)換工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
unity實(shí)現(xiàn)鼠標(biāo)拖住3D物體
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)鼠標(biāo)拖住3D物體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
C#實(shí)現(xiàn)的文件操作封裝類完整實(shí)例【刪除,移動(dòng),復(fù)制,重命名】
這篇文章主要介紹了C#實(shí)現(xiàn)的文件操作封裝類,結(jié)合完整實(shí)例形式分析了C#封裝文件的刪除,移動(dòng),復(fù)制,重命名等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03
C#中使用快速排序按文件創(chuàng)建時(shí)間將文件排序的源碼
C#中使用快速排序按文件創(chuàng)建時(shí)間將文件排序的源碼...2007-03-03
c# 連接access數(shù)據(jù)庫(kù)config配置
c# 連接access數(shù)據(jù)庫(kù)config配置,需要的朋友可以參考一下2013-02-02
通過C#實(shí)現(xiàn)發(fā)送自定義的html格式郵件
本篇文章主要介紹了通過C#實(shí)現(xiàn)發(fā)送自定義的html格式郵件,詳細(xì)的介紹了發(fā)送HTML格式郵件的方法,有興趣的可以了解一下。2017-02-02
C#實(shí)現(xiàn)協(xié)同過濾算法的實(shí)例代碼
這篇文章介紹了C#實(shí)現(xiàn)協(xié)同過濾算法的實(shí)例代碼,有需要的朋友可以參考一下2013-07-07

