Visual C#是微軟公司推出的下一代程序開發語言,是微軟.Net 框架中的的一個重要組成部分,在推出Visual C#的過程中,微軟公司還推出了與之相對應的一個軟件開發包--.Net FrameWork SDK。此軟件開發包裡面封裝了許多類、對象。Visual C#就是通過調用這些類、對象來實現許多比較強大的功能。
-.概述:
正由於C#調用了許多功能強大的類和對象,所以用C#和.Net Framework實現各種不同圖象格式之間的轉化是非常方便,而用Windows API的話,由於沒有直接的函數支持,工作量將會非常大。在C#下,你只要運用ImageFormat類(在System.Drawing.Imaging 名字空間下),就可以實現以下常見圖象格式之間的轉化了。
BMP - 擴展名.bmp
GIF - 擴展名.gif
Icon - 擴展名.ico
JPEG - 擴展名.jpg, .jpeg
PNG - 擴展名.png
TIFF - 擴展名.tif
WMF - 擴展名 .wmf
二.程序設計和運行的環境:
(1)微軟公司視窗2000服務器版
(2).Net FrameWrok SDK Beta 2版
三.具體步驟:
(1).在Visual Studio下新建一個C#的工程,不妨命名為Image Converter。圖示如下:
(2).現在我們來設計程序的主界面:
先將窗體的Text屬性設置為Image Converter。
再往窗體上添加兩個Button控件、兩個ComboBox控件以及一個PictureBox:
將兩個Button控件的Name屬性分別置為m_btnOpen和m_btnSaveAs,Text屬性分別置為“打開”和“轉化為”(不妨將它們的FlatStyle屬性都置為Flat,因為現在流行Flat啊!)。
將兩個ComboBox控件的Name屬性分別置為m_cmbOpen和m_cmbSaveAs,將它們的Text屬性都設置為*.bmp,同時在它們的Items屬性中的字符串集合編輯器裡均加入*.bmp*.jpg*.gif*.tif(每行一個)。
最後我們將PictureBox控件的Name屬性設置為m_pictureBox,同時為了外觀明顯我們將它的BorderStyle屬性改為FixedSingle。
好了,到此為止我們以及做好了所有的界面工作了。圖示如下:
3).接下來我們就編寫代碼部分(窗體右鍵的“查看代碼”就可以打開代碼文件):
首先我們在代碼文件的開始處添加using System.Drawing.Imaging;因為該程序用到了ImageFormat類,而這個類是在System.Drawing.Imaging名字空間下的,所以必須添加這一句。
接著,給我們的類添加三個私有的數據成員:private Bitmap m_bitmap;private int m_width0;private int m_height0;在構造函數中初始化這三個數據成員,代碼如下:
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;
}
最後,給“打開”和“轉化為”兩個按鈕添加Click事件,生成兩個消息相應函數,代碼以及注釋如下:
private void m_btnOpen_Click(object sender, System.EventArgs e)
{
file://創建一個打開對話框對象
OpenFileDialog ofd = new OpenFileDialog();
file://設置對話框的各項屬性
ofd.Filter = m_cmbOpen.Text + "|" + m_cmbOpen.Text;
string filter = ofd.Filter;
ofd.InitialDirectory = System.Environment.CurrentDirectory;
ofd.Title = "打開圖象文件";
ofd.ShowHelp = true;
if(ofd.ShowDialog() == DialogResult.OK)
{
file://如果是OK,則建立一個圖象對象
string strFileName = ofd.FileName;
m_bitmap = new Bitmap(strFileName);
file://調整m_pictureBox的大小以適合圖象大小
if(m_bitmap.Width > m_bitmap.Height)
{
file://保持寬度
m_pictureBox.Width = m_width0;
m_pictureBox.Height = (int)((double)m_bitmap.Height*m_width0/m_bitmap.Width);
}
else
{
file://保持高度
m_pictureBox.Height = m_height0;
m_pictureBox.Width = (int)((double)m_bitmap.Width*m_height0/m_bitmap.Height);
}
file://顯示圖片
m_pictureBox.Image = m_bitmap;
file://設置窗體的標題
this.Text = "Image Converter: " + strFileName;
m_btnSaveAs.Enabled = true;
}
}
private void m_btnSaveAs_Click(object sender, System.EventArgs e)
{
file://創建一個保存對話框對象
SaveFileDialog sfd = new SaveFileDialog();
file://設置對話框的各項屬性
sfd.Title = "轉化為";
sfd.OverwritePrompt = true;
sfd.CheckPathExists = true;
sfd.Filter = m_cmbSaveAs.Text + "|" + m_cmbSaveAs.Text;
sfd.ShowHelp = true;
if(sfd.ShowDialog() == DialogResult.OK)
{
file://如果是OK,則根據不同的選項保存為相應格式的文件
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啦,現在按Ctrl+F5試一下效果吧。圖示如下:
四.總結:
以上,我們用C#很快做了個圖片格式轉化器,從中我們可以看到C#中類的強大功能。而且C#中有許許多多的類以及對象,如果能靈活地運用它們的話,就可以開發出很多功能強大的應用程序。
對以上這個程序,我們還可以擴展其功能,比如我們做個圖片格式批量轉化的工具。這樣的話,我們也不必一個一個地去打開文件,然後進行轉化了,可以將一個目錄中的所有圖片文件轉化為我們需要的文件格式,我想這在網頁制作中圖片格式處理時是非常有用的。有興趣的讀者可以試著去擴展一下這個功能。