扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
三、实际开发中的图像操作
下面,我们来讨论实际中的使用情况。我将在本文示例应用程序中添加下列功能:
1. 以用户指定的格式保存图像。
2. 根据从菜单下选择的百分比放大图像。
3. 创建一个加载图像的略缩图。
相应的菜单操作如下所示:
mnuSave—文件菜单下保存图像的子菜单。
mnu200Zoom—放大图像200%。
mnuThumbNail—创建图像的一个略缩图。
下面是处理菜单项mnuSave的Click事件相应的方法:
private void mnuSave_Click(object sender,System.EventArgs e)
...{
//如果图像已经创建
if(curImage == null)
return;
//调用SaveFileDialog对话框
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Title = "Save Image As";
saveDlg.OverwritePrompt = true;
saveDlg.CheckPathExists = true;
saveDlg.Filter =
"Bitmap File(*.bmp)|*.bmp|" +
"Gif File(*.gif)|*.gif|" +
"JPEG File(*.jpg)|*.jpg|" +
"PNG File(*.png)|*.png" ;
saveDlg.ShowHelp = true;
//如果选择,则进行保存
if(saveDlg.ShowDialog() == DialogResult.OK)
...{
//得到用户选择的文件名
string fileName = saveDlg.FileName;
//得到文件扩展名
string strFilExtn =fileName.Remove(0,fileName.Length - 3);
//保存文件
switch(strFilExtn)
...{
case "bmp":
curImage.Save(fileName, ImageFormat.Bmp);
break;
case "jpg":
curImage.Save(fileName, ImageFormat.Jpeg);
break;
case "gif":
curImage.Save(fileName, ImageFormat.Gif);
break;
case "tif":
curImage.Save(fileName, ImageFormat.Tiff);
break;
case "png":
curImage.Save(fileName, ImageFormat.Png);
break;
default:
break;
}
}
}
首先,以可接收的扩展名显示这个保存对话框。然后,由从该对话框返回的文件名检索相应的扩展名。最后,根据该扩展名,使用相应的图像格式参数调用Save()方法。
接下来,我们分析菜单项mnu200Zoom相应的处理器。首先,让我们在应用程序级添加下列以粗体显示的一行:
private double curZoom=1.0;
private Image curImage=null;//用于存储当前图像
private int i = 0;//用于把屏幕重画操作与缩略图绘制部分区别开来
然后,必须对mnuLoad处理代码作少许调整,如下所示:
private void mnuLoad_Click(object sender,System.EventArgs e)
...{
//创建OpenFileDialog
OpenFileDialog opnDlg = new OpenFileDialog();
//设置一个图像类型过滤器
opnDlg.Filter =
"All Image files|*.bmp;*.gif;*.jpg;*.ico;"+
"*.emf;,*.wmf|Bitmap Files(*.bmp;*.gif;*.jpg;"+
"*.ico)|*.bmp;*.gif;*.jpg;*.ico|"+
"Meta Files(*.emf;*.wmf;*.png)|*.emf;*.wmf;*.png";
opnDlg.Title = "打开图像文件";
opnDlg.ShowHelp = true;
//如果OK,选择它
if(opnDlg.ShowDialog() == DialogResult.OK)
...{
//读取当前选择的文件名
curFileName = opnDlg.FileName;
//使用Image.FromFile创建图像对象
try
...{
curImage = Image.FromFile(curFileName);
}
catch(Exception exp)
...{
MessageBox.Show(exp.Message);
}
}
//改变AutoScrollMinSize属性
this.AutoScrollMinSize = new Size
((int)(curImage.Width * curZoom),
(int)(curImage.Height * curZoom));
i++;
//重新绘制表单
Invalidate();
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者