用C#制作图片格式转化器 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。如图1所示：

图1

(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_picture Box，同时为了外观明显我们将它的BorderStyle属性改为Fixed Single。
好了，到此为止我们以及做好了所有的界面工作了。如图2所示：

图2

(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)
{
//创建一个打开对话框对象
OpenFileDialog ofd = new OpenFileDialog();
//设置对话框的各项属性
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);
//调整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;
//设置窗体的标题
this.Text = "Image Converter: " + strFileName;
m_btnSaveAs.Enabled = true;
}
}
private void m_btnSaveAs_Click(object sender, System.Event Args e)
{
//创建一个保存对话框对象
SaveFileDialog sfd = new SaveFileDialog();
//设置对话框的各项属性
sfd.Title = "转化为";
sfd.OverwritePrompt = true;
sfd.CheckPathExists = true;
sfd.Filter = m_cmbSaveAs.Text + "|" + m_cmbSaveAs.Text;
sfd.ShowHelp = true;
if(sfd.ShowDialog() == DialogResult.OK)
{
//如果是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试一下效果吧。如图3所示：

图3

总结：以上，我们用C＃很快做了个图片格式转化器，从中我们可以看到C＃中类的强大功能。而且C＃中有许许多多的类以及对象，如果能灵活地运用它们的话，就可以开发出很多功能强大的应用程序。
对以上这个程序，我们还可以扩展其功能，比如我们做个图片格式批量转化的工具。这样的话，我们也不必一个一个地去打开文件，然后进行转化了，可以将一个目录中的所有图片文件转化为我们需要的文件格式，我想这在网页制作中图片格式处理时是非常有用的。有兴趣的读者可以试着去扩展一下这个功能。

(涂毅民)