C# GDI+编程之基础篇(二)

原创|其它|编辑:郝浩|2009-07-10 09:30:15.000|阅读 596 次

概述:本文先简单介绍了GDI+的工作机理,然后说明了图像操作中的缩略图,缩放与保存,以及在实际开发中的图像操作。这些仅是.NET C#环境下关于GDI+编程的一些基本的实用操作片断。供大家参考!

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

三、实际开发中的图像操作

下面,我们来讨论实际中的使用情况。我将在本文示例应用程序中添加下列功能:

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();
}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:IT168

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP