用C#制作圖片格式轉(zhuǎn)化器

2010-08-28 10:49:35來源:西部e網(wǎng)作者:

Visual C#是微軟公司推出的下一代程序開發(fā)語言,是微軟.Net 框架中的的一個重要組成部分,在推出Visual C#的過程中,微軟公司還推出了與之相對應(yīng)的一個軟件開發(fā)包--.Net FrameWork SDK。此軟件開發(fā)包里面封裝了許多類、對象。Visual C#就是通過調(diào)用這些類、對象來實現(xiàn)許多比較強(qiáng)大的功能。

-.概述:

正由于C#調(diào)用了許多功能強(qiáng)大的類和對象,所以用C#和.Net Framework實現(xiàn)各種不同圖象格式之間的轉(zhuǎn)化是非常方便,而用Windows API的話,由于沒有直接的函數(shù)支持,工作量將會非常大。在C#下,你只要運用ImageFormat類(在System.Drawing.Imaging 名字空間下),就可以實現(xià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è)計和運行的環(huán)境:

(1)微軟公司視窗2000服務(wù)器版

(2).Net FrameWrok SDK Beta 2版

三.具體步驟:

(1).在Visual Studio下新建一個C#的工程,不妨命名為Image Converter。圖示如下:



(2).現(xiàn)在我們來設(shè)計程序的主界面:

先將窗體的Text屬性設(shè)置為Image Converter。

再往窗體上添加兩個Button控件、兩個ComboBox控件以及一個PictureBox:

將兩個Button控件的Name屬性分別置為m_btnOpen和m_btnSaveAs,Text屬性分別置為“打開”和“轉(zhuǎn)化為”(不妨將它們的FlatStyle屬性都置為Flat,因為現(xiàn)在流行Flat。。。

將兩個ComboBox控件的Name屬性分別置為m_cmbOpen和m_cmbSaveAs,將它們的Text屬性都設(shè)置為*.bmp,同時在它們的Items屬性中的字符串集合編輯器里均加入*.bmp*.jpg*.gif*.tif(每行一個)。

最后我們將PictureBox控件的Name屬性設(shè)置為m_pictureBox,同時為了外觀明顯我們將它的BorderStyle屬性改為FixedSingle。

好了,到此為止我們以及做好了所有的界面工作了。圖示如下:

(3).接下來我們就編寫代碼部分(窗體右鍵的“查看代碼”就可以打開代碼文件):

首先我們在代碼文件的開始處添加using System.Drawing.Imaging;因為該程序用到了ImageFormat類,而這個類是在System.Drawing.Imaging名字空間下的,所以必須添加這一句。

接著,給我們的類添加三個私有的數(shù)據(jù)成員:private Bitmap m_bitmap;private int m_width0;private int m_height0;在構(gòu)造函數(shù)中初始化這三個數(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;

}

最后,給“打開”和“轉(zhuǎn)化為”兩個按鈕添加Click事件,生成兩個消息相應(yīng)函數(shù),代碼以及注釋如下:

private void m_btnOpen_Click(object sender, System.EventArgs e)

{

//創(chuàng)建一個打開對話框?qū)ο?

OpenFileDialog ofd = new OpenFileDialog();

//設(shè)置對話框的各項屬性

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)

{

//如果是OK,則建立一個圖象對象

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)建一個保存對話框?qū)ο?

SaveFileDialog sfd = new SaveFileDialog();

//設(shè)置對話框的各項屬性

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ù)不同的選項保存為相應(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#很快做了個圖片格式轉(zhuǎn)化器,從中我們可以看到C#中類的強(qiáng)大功能。而且C#中有許許多多的類以及對象,如果能靈活地運用它們的話,就可以開發(fā)出很多功能強(qiáng)大的應(yīng)用程序。

對以上這個程序,我們還可以擴(kuò)展其功能,比如我們做個圖片格式批量轉(zhuǎn)化的工具。這樣的話,我們也不必一個一個地去打開文件,然后進(jìn)行轉(zhuǎn)化了,可以將一個目錄中的所有圖片文件轉(zhuǎn)化為我們需要的文件格式,我想這在網(wǎng)頁制作中圖片格式處理時是非常有用的。有興趣的讀者可以試著去擴(kuò)展一下這個功能。

關(guān)鍵詞:C#

贊助商鏈接: