Visual C#是微軟公司推出的下一代程序開(kāi)發(fā)語(yǔ)言,是微軟.Net 框架中的的一個(gè)重要組成部分,在推出Visual C#的過(guò)程中,微軟公司還推出了與之相對(duì)應(yīng)的一個(gè)軟件開(kāi)發(fā)包--.Net FrameWork SDK。此軟件開(kāi)發(fā)包里面封裝了許多類、對(duì)象。Visual C#就是通過(guò)調(diào)用這些類、對(duì)象來(lái)實(shí)現(xiàn)許多比較強(qiáng)大的功能。
-.概述:
正由于C#調(diào)用了許多功能強(qiáng)大的類和對(duì)象,所以用C#和.Net Framework實(shí)現(xiàn)各種不同圖象格式之間的轉(zhuǎn)化是非常方便,而用Windows API的話,由于沒(méi)有直接的函數(shù)支持,工作量將會(huì)非常大。在C#下,你只要運(yùn)用ImageFormat類(在System.Drawing.Imaging 名字空間下),就可以實(shí)現(xiàn)以下常見(jiàn)圖象格式之間的轉(zhuǎn)化了。
BMP - 擴(kuò)展名.bmp
GIF - 擴(kuò)展名.gif
Icon - 擴(kuò)展名.ico
JPEG - 擴(kuò)展名.jpg, .jpeg
PNG - 擴(kuò)展名.png
TIFF - 擴(kuò)展名.tif
WMF - 擴(kuò)展名 .wmf
二.程序設(shè)計(jì)和運(yùn)行的環(huán)境:
(1)微軟公司視窗2000服務(wù)器版
(2).Net FrameWrok SDK Beta 2版
三.具體步驟:
(1).在Visual Studio下新建一個(gè)C#的工程,不妨命名為Image Converter。圖示如下:

(2).現(xiàn)在我們來(lái)設(shè)計(jì)程序的主界面:
先將窗體的Text屬性設(shè)置為Image Converter。
再往窗體上添加兩個(gè)Button控件、兩個(gè)ComboBox控件以及一個(gè)PictureBox:
將兩個(gè)Button控件的Name屬性分別置為m_btnOpen和m_btnSaveAs,Text屬性分別置為“打開(kāi)”和“轉(zhuǎn)化為”(不妨將它們的FlatStyle屬性都置為Flat,因?yàn)楝F(xiàn)在流行Flat?。。?
將兩個(gè)ComboBox控件的Name屬性分別置為m_cmbOpen和m_cmbSaveAs,將它們的Text屬性都設(shè)置為*.bmp,同時(shí)在它們的Items屬性中的字符串集合編輯器里均加入*.bmp*.jpg*.gif*.tif(每行一個(gè))。
最后我們將PictureBox控件的Name屬性設(shè)置為m_pictureBox,同時(shí)為了外觀明顯我們將它的BorderStyle屬性改為FixedSingle。
好了,到此為止我們以及做好了所有的界面工作了。圖示如下:

(3).接下來(lái)我們就編寫(xiě)代碼部分(窗體右鍵的“查看代碼”就可以打開(kāi)代碼文件):
首先我們?cè)诖a文件的開(kāi)始處添加using System.Drawing.Imaging;因?yàn)樵?/font>程序用到了ImageFormat類,而這個(gè)類是在System.Drawing.Imaging名字空間下的,所以必須添加這一句。
接著,給我們的類添加三個(gè)私有的數(shù)據(jù)成員:private Bitmap m_bitmap;private int m_width0;private int m_height0;在構(gòu)造函數(shù)中初始化這三個(gè)數(shù)據(jù)成員,代碼如下:
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
m_bitmap = null;
m_width0 = m_pictureBox.Size.Width;
m_height0 = m_pictureBox.Size.Height;
}
最后,給“打開(kāi)”和“轉(zhuǎn)化為”兩個(gè)按鈕添加Click事件,生成兩個(gè)消息相應(yīng)函數(shù),代碼以及注釋如下:
private void m_btnOpen_Click(object sender, System.EventArgs e)
{
//創(chuàng)建一個(gè)打開(kāi)對(duì)話框?qū)ο?
OpenFileDialog ofd = new OpenFileDialog();
//設(shè)置對(duì)話框的各項(xiàng)屬性
ofd.Filter = m_cmbOpen.Text + "|" + m_cmbOpen.Text;
string filter = ofd.Filter;
ofd.InitialDirectory = System.Environment.CurrentDirectory;
ofd.Title = "打開(kāi)圖象文件";
ofd.ShowHelp = true;
if(ofd.ShowDialog() == DialogResult.OK)
{
//如果是OK,則建立一個(gè)圖象對(duì)象
string strFileName = ofd.FileName;
m_bitmap = new Bitmap(strFileName);
//調(diào)整m_pictureBox的大小以適合圖象大小
if(m_bitmap.Width > m_bitmap.Height)
{
//保持寬度
m_pictureBox.Width = m_width0;
m_pictureBox.Height = (int)((double)m_bitmap.Height*m_width0/m_bitmap.Width);
}
else
{
//保持高度
m_pictureBox.Height = m_height0;
m_pictureBox.Width = (int)((double)m_bitmap.Width*m_height0/m_bitmap.Height);
}
//顯示圖片
m_pictureBox.Image = m_bitmap;
//設(shè)置窗體的標(biāo)題
this.Text = "Image Converter: " + strFileName;
m_btnSaveAs.Enabled = true;
}
}
private void m_btnSaveAs_Click(object sender, System.EventArgs e)
{
//創(chuàng)建一個(gè)保存對(duì)話框?qū)ο?
SaveFileDialog sfd = new SaveFileDialog();
//設(shè)置對(duì)話框的各項(xiàng)屬性
sfd.Title = "轉(zhuǎn)化為";
sfd.OverwritePrompt = true;
sfd.CheckPathExists = true;
sfd.Filter = m_cmbSaveAs.Text + "|" + m_cmbSaveAs.Text;
sfd.ShowHelp = true;
if(sfd.ShowDialog() == DialogResult.OK)
{
//如果是OK,則根據(jù)不同的選項(xiàng)保存為相應(yīng)格式的文件
string strFileName = sfd.FileName;
switch(m_cmbSaveAs.Text)
{
case "*.bmp":
// 在這里用ImageFormat類
m_bitmap.Save(strFileName, ImageFormat.Bmp);
break;
case "*.jpg":
// 在這里用ImageFormat類
m_bitmap.Save(strFileName, ImageFormat.Jpeg);
break;
case "*.gif":
// 在這里用ImageFormat類
m_bitmap.Save(strFileName, ImageFormat.Gif);
break;
case "*.tif":
// 在這里用ImageFormat類
m_bitmap.Save(strFileName, ImageFormat.Tiff);
break;
}
this.Text = "Image Converter: " + strFileName;
}
}
(4).OK啦,現(xiàn)在按Ctrl+F5試一下效果吧。圖示如下:

四.總結(jié):
以上,我們用C#很快做了個(gè)圖片格式轉(zhuǎn)化器,從中我們可以看到C#中類的強(qiáng)大功能。而且C#中有許許多多的類以及對(duì)象,如果能靈活地運(yùn)用它們的話,就可以開(kāi)發(fā)出很多功能強(qiáng)大的應(yīng)用程序。
對(duì)以上這個(gè)程序,我們還可以擴(kuò)展其功能,比如我們做個(gè)圖片格式批量轉(zhuǎn)化的工具。這樣的話,我們也不必一個(gè)一個(gè)地去打開(kāi)文件,然后進(jìn)行轉(zhuǎn)化了,可以將一個(gè)目錄中的所有圖片文件轉(zhuǎn)化為我們需要的文件格式,我想這在網(wǎng)頁(yè)制作中圖片格式處理時(shí)是非常有用的。有興趣的讀者可以試著去擴(kuò)展一下這個(gè)功能。