构建简单的图像转换实用程序






4.74/5 (9投票s)
2006年9月13日
5分钟阅读

77709

1184
本文介绍了一种构建图片转换工具的非常简单的方法,该工具允许用户打开支持的图片类型并将其转换为另一种支持的图片类型。
引言
本文介绍了一种构建图片转换工具的非常简单的方法,该工具允许用户打开支持的图片类型并将其转换为另一种支持的图片类型。应用程序支持的文件类型包括:
- Bitmap
- 增强型图元文件
- Exchangeable Image file (可交换图像文件)
- GIF 文件
- JPEG 文件
- PNG 文件
- TIFF 文件
- Windows 图元文件
所有文件转换均通过使用 Microsoft .NET 2.0 Imaging 类库的转换方法来实现。除了演示实现文件转换的方法外,该应用程序还演示了将图片文件打开到 picture box 控件的方法。
图 1:正在使用的图片转换工具
入门
要开始,请解压缩附件并将解决方案加载到 Visual Studio 2005 中。检查解决方案资源管理器,并注意项目中包含的文件。
图 2:解决方案资源管理器显示项目文件
解决方案的内容显示它包含一个名为“ImageConverter”的单个项目。该项目包含一个名为“Form1”的单个窗体。Form1.vb 类包含驱动该工具所需的所有代码。
快速检查引用会发现项目中仅包含默认的类库,而 Program.cs 文件是该文件默认版本的未编辑版本。
代码:主应用程序窗体
主应用程序的窗体类 (Form1
) 包含使文件转换以及将文件打开到应用程序的图片查看器(只不过是一个标准的 PictureBox
控件)所需的所有应用程序代码。
该类以 using
语句开头;导入包括标准和默认导入以及对 System.Drawing.Imaging
的附加引用。类声明同样简单。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.Windows.Forms;
namespace ImageConverter
{
public partial class Form1 : Form
{…
在类声明和库导入之后,声明了一些局部变量,以在类方法之间支持应用程序内的文件管理。
// local variable declarations
string CurrentFile;
Image img;
字符串变量“CurrentFile
”用于存储当前工作图片文件的名称(已加载到窗体的 PictureBox
中)。图像变量“img
”用于为窗体提供对当前图像的访问级别;此处这样做是为了使图像可供任何需要访问图像的窗体方法调用使用。
变量声明之后,是 Visual Studio IDE 添加到项目中的一部分默认代码。如果您愿意,可以从 IDE 中检查该代码,但本文不作讨论。
下一个值得一提的代码是用于打开图片文件并将其加载到窗体的代码。实际上,为了执行转换,加载文件并不是必需的,但是,此工具会加载文件,以便用户在进行转换之前可以查看它。文件打开方法对应的代码如下:
// Show open file dialog to allow user to open an image file
// for display in the application
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.Title = "Open Image File";
openFileDialog1.Filter = "Bitmap Files|*.bmp" +
"|Enhanced Windows MetaFile|*.emf" +
"|Exchangeable Image File|*.exif" +
"|Gif Files|*.gif|Icons|*.ico|JPEG Files|*.jpg" +
"|PNG Files|*.png|TIFF Files|*.tif|Windows MetaFile|*.wmf";
openFileDialog1.DefaultExt = "bmp";
openFileDialog1.FilterIndex = 1;
openFileDialog1.FileName = "";
openFileDialog1.ShowDialog();
if (openFileDialog1.FileName == "")
return;
CurrentFile = openFileDialog1.FileName.ToString();
img = Image.FromFile(openFileDialog1.FileName);
pictureBox1.Image = img;
}
该方法首先配置并显示“文件打开”对话框;用户可以从对话框中导航到他们打算转换的文件。该方法检查是否输入了有效的文件名,如果没有有效的文件名,则应用程序将中止尝试并关闭对话框。
如果已选择有效文件,该方法会将当前文件名变量设置为文件打开对话框中的文件名,并将 img
变量设置为使用成像库中包含的 Image.FromFile
方法。加载文件后,您应该会在窗体上的 PictureBox
控件中看到选定的图像。
加载图像后,用户可以打开“文件”菜单,选择“转换为”,然后选择其中一个备用的图像文件格式。
图 3:转换为备用图像文件格式选项
当用户选择其中一个可用的图像选项时,应用程序将启动一个用于完成转换的方法;应用程序不会覆盖现有文件,也不会允许用户指定新的文件名或位置。转换后的文件将保存在与原始文件相同的文件夹中,但会带有新的文件扩展名。
图 4:Windows 资源管理器显示同一目录中的原始文件和转换后的文件(请注意,“大小”和“类型”值可验证转换是否已发生)。
虽然应用程序中用于执行转换的代码特定于目标图像类型,但每个代码块中的大部分内容变化很小。由于所有转换代码基本相同,因此我只在此处显示其中一个方法,您可以参考源代码查看每个特定的转换。
// Convert to GIF
private void gIFFileToolStripMenuItem_Click(object sender, EventArgs e)
{
string newName =
System.IO.Path.GetFileNameWithoutExtension(CurrentFile);
newName = newName + ".gif";
try
{
img.Save(newName, ImageFormat.Gif);
}
catch
{
MessageBox.Show("Failed to save image to GIF format.", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
MessageBox.Show("Image file saved to " + newName.ToString(),
"Image Saved", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
此处显示的是将当前图像转换为 GIF 格式的调用。在方法开始时,会声明一个新字符串变量,并用于捕获当前文件名(不带当前文件扩展名)的名称。然后,newName
变量会添加新转换文件类型的扩展名。
配置好新文件名后,通过“img
”变量可访问的现有图像会调用其 Save
方法,并将新文件名和所需的图像格式传递给此 Save
方法。然后,Imaging 库函数会执行将图像转换为目标格式并将其与原始版本一起保存在目录中的工作。
如果转换未成功(例如,如果用户尝试覆盖原始文件),将显示一个消息框告知用户请求的转换未发生。如果保存成功且没有错误,用户将被告知图像文件已保存到新文件名。就是这么简单。如果您检查图像文件目录,您将看到原始文件和转换后的文件,每个文件都带有正确的扩展名。
摘要
此应用程序试图描述通过使用 .NET 2.0 框架的 Imaging 类来实现图片文件格式转换是多么简单。虽然本文档在 C# 2005 应用程序的上下文中讨论了该主题,但如果您正在使用 .NET 1.0 或 .NET 2.0,并且在 1.0 或 1.1 框架解决方案中工作,那么没有理由不能将相同的代码应用于它们。