软件工程模拟画图课设文档格式.docx
《软件工程模拟画图课设文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程模拟画图课设文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
1.开发环境介绍
MicrosoftVisualStudio2010
VisualStudio是微软公司推出的开发环境。
是目前最流行的Windows平台应用程序开发环境。
VisualStudio2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。
VisualStudio2010同时带来了NETFramework4.0、MicrosoftVisualStudio2010CTP(CommunityTechnologyPreview--CTP),并且支持开发面向Windows7的应用程序。
除了MicrosoftSQLServer,它还支持IBMDB2和Oracle数据库。
2.需求分析
2.1总体目标
设计一个画图程序,能够用图形用户界面实现,有菜单和工具栏等,符合编程规范。
实现画图工具、画直线、画箭头、画椭圆、画多边形的功能,并且在绘图过程中能够修改该画笔的大小以及颜色。
能够进行文件操作,实现新建、打开、保存、打印、设置页面等。
2.2要实现的功能
1、这个画图程序,最基本的功能是,作为一个画图工具利用它实现在屏幕上任意绘画、书写的功能;
2、利用这个画图程序,通过选择画直线、画箭头、画多边形、画矩形、椭圆、圆形等功能选项并且在屏幕上拖动鼠标操作能实现画出相应图形的功能;
3、这个画图程序,还需具备橡皮擦的功能,利用这个橡皮擦能够擦除屏幕上的图案,并且此橡皮擦也应该能够改变大小;
4、这个画图程序,还应该做到能够改变画笔颜色的功能;
5、这个画图程序,还应该具备能够清除整个屏幕已绘制图画的功能。
3.设计说明
3.1总体设计
画图板主界面如下图所示,打开程序执行
图3-1-1画图板主界面
3.2详细设计
1.文件
新建:
新建窗口;
打开:
打开本地图片;
保存:
保存图形;
另存为:
另存图形;
退出:
关闭窗体
2.图像
清除图像
图像属性
3.帮助
关于
4.工具栏:
如上图所示。
5.状态栏:
显示鼠标位置。
图3-2-1画图板功能界面
4.实现与测试
用Graphics方法在picturebox中新建画板,并背景颜色为白色
privatevoidBuildNewPic_Click(objectsender,EventArgse)
{
pbImg.Size=DefaultPicSize;
this.panel2.AutoScrollPosition=newPoint(0,0);
Bitmapbmp=newBitmap(DefaultPicSize.Width,DefaultPicSize.Height);
Graphicsg=Graphics.FromImage(bmp);
g.FillRectangle(newSolidBrush(Color.White),0,0,DefaultPicSize.Width,DefaultPicSize.Height);
g.Dispose();
g=pbImg.CreateGraphics();
g.DrawImage(bmp,0,0);
reSize.Location=newPoint(DefaultPicSize.Width,DefaultPicSize.Height);
dt.OrginalImg=bmp;
sFileName=null;
}
在picturebox中打开图片
(
首先创建打开文件对话框openfile1
InitialDirectory是文件初始目录的字符串
Filter为文件名筛选器字符串,用于决定打开时出来的类型,FilterIndex
就是打开时的索引值,打开时的类型.
RestoreDirectory
表示在关闭对话框时是否还原到当前目录.
If判断是否点击了打开按纽
pictureBox1.Image=Image.FromFile(openFile1.FileName)
是加载选定的文件.)。
privatevoid打开ToolStripMenuItem_Click(objectsender,EventArgse)
OpenFileDialogopenPic=newOpenFileDialog();
openPic.InitialDirectory="
C:
\\users\\public\\pictures"
;
//打开文件的途径openPic.Filter="
ImageFiles(*.jpg,*.png,*.gif,*.bmp)|*.jpg;
*.png;
*.gif;
*.bmp|AllFiles(*.*)|*.*"
//打开文件的格式
openPic.FilterIndex=2;
openPic.RestoreDirectory=true;
if(openPic.ShowDialog()==DialogResult.OK)
bt=newBitmap(openPic.FileName);
pictureBox1.Image=bt;
ig=Graphics.FromImage(bt);
保存文件(SaveFileDialog
类表示一个通用对话框,创建子类并调用ShowDialog方法来显示对话框,允许指定用于保存文件选项.
通过对话框能够将dt控件中的文件存盘)。
.
//"保存"事件处理方法
privatevoidsavePic_Click(objectsender,EventArgse)
if(sFileName!
=null)
if(MessageBox.Show("
是否要保存文件?
"
"
系统提示"
MessageBoxButtons.YesNo)==DialogResult.Yes)
dt.OrginalImg.Save(sFileName);
else
SaveFileDialogsfd=newSaveFileDialog();
sfd.Filter="
JPG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp"
if(sfd.ShowDialog()==DialogResult.OK)
dt.OrginalImg.Save(sfd.FileName);
sFileName=sfd.FileName;
//"另存为"事件处理方法
privatevoidSaveAs_Click(objectsender,EventArgse)
退出窗体
//"退出"事件处理方法
privatevoidQuit_Click(objectsender,EventArgse)
dt.ClearVar();
Application.Exit();
picturebox的mousedown事件,新建一个bitmap类,并设置起点坐标。
privatevoidpictureBox1_MouseDown(objectsender,MouseEventArgse)
Bitmapmjl=newBitmap(bt);
history.Push(mjl);
f=true;
x1=e.X;
y1=e.Y;
if(type!
=0)
sbt=newBitmap(bt);
}
编写画笔,橡皮,画三角形,矩形等一些图形的功能,以及在状态栏中显示鼠标坐标
privatevoidAttributePic_Click(objectsender,EventArgse)
MessageBox.Show("
图像高:
+pbImg.Height+"
px,图像宽:
+pbImg.Width+"
px"
图像属性"
);
//"清除图像"事件处理方法
privatevoidclearPic_Click(objectsender,EventArgse)
Bitmapnewpic=newBitmap(pbImg.Width,pbImg.Height);
Graphicsg=Graphics.FromImage(newpic);
g.FillRectangle(newSolidBrush(Color.White),0,0,pbImg.Width,pbImg.Height);
g.DrawImage(newpic,0,0);
dt.OrginalImg=newpic;
///绘制直线,矩形,圆形
///<
/summary>
paramname="
e"
>
鼠标参数<
/param>
sType"
绘图类型<
publicvoidDraw(MouseEventArgse,stringsType)
if(startDraw)
//为防止造成图片抖动,防止记录不必要的绘图过程中的痕迹,我们先在中间画板上将图片完成,然后在将绘制好的图片一次性画到目标画板上
//步骤1实例化中间画板,画布为上一次绘制结束时的画布的副本(如果第一次绘制,那画布就是初始时的画布副本)
//步骤2按照绘图样式在中间画板上进行绘制
//步骤3将绘制结束的图片画到中间画布上
//因为我们最终绘制结束时的图片应该是在鼠标松开时完成,所以鼠标移动中所绘制的图片都只画到中间画布上,但仍需要显示在目标画板上,否则鼠标移动过程中我们就看不到效果。
//当鼠标松开时,才把最后的那个中间图片画到原始画布上
Imageimg=(Image)orginalImg.Clone();
//为防止直接改写原始画布,我们定义一个新的image去得到原始画布
newgraphics=Graphics.FromImage(img);
//实例化中间画板
switch(sType)
case"
Line"
:
{//画直线
newgraphics.DrawLine(p,startPointF,newPointF(e.X,e.Y));
break;
Rect"
{//画矩形
floatwidth=Math.Abs(e.X-startPointF.X);
//确定矩形的宽
floatheigth=Math.Abs(e.Y-startPointF.Y);
//确定矩形的高
PointFrectStartPointF=startPointF;
if(e.X<
startPointF.X)
rectStartPointF.X=e.X;
if(e.Y<
startPointF.Y)
rectStartPointF.Y=e.Y;
newgraphics.DrawRectangle(p,rectStartPointF.X,rectStartPointF.Y,width,heigth);
Circle"
{//画圆形
newgraphics.DrawEllipse(p,startPointF.X,startPointF.Y,e.X-startPointF.X,e.Y-startPointF.Y);
FillRect"
{//画实心矩形
newgraphics.FillRectangle(newSolidBrush(drawColor),rectStartPointF.X,rectStartPointF.Y,width,heigth);
FillCircle"
{//画实心圆
newgraphics.FillEllipse(newSolidBrush(drawColor),startPointF.X,startPointF.Y,e.X-startPointF.X,e.Y-startPointF.Y);
newgraphics.Dispose();
//绘图完毕释放中间画板所占资源
newgraphics=Graphics.FromImage(finishingImg);
//另建一个中间画板,画布为中间图片
newgraphics.DrawImage(img,0,0);
//将图片画到中间图片
DrawTools_Graphics.DrawImage(img,0,0);
//将图片画到目标画板上
img.Dispose();
1.写字功能
写字板打开之后,选择画笔之后,就可以开始写字,如下图4-1-1所示
图4-1-1画图板写字功能
2.画圆,画正方形
打开画图板程序运行之后,选择圆或者方形,就可以画出相应的图形,颜色也可以选择
图4-2-1画图板画图功能
3.保存
画图板的保存如下4-3-1所示
图4-3-1画图板保存
4.打开图片
画图板打开之后,选择文件中打开按钮,浏览选择图片即可打开想要编辑的图片,效果如下4-4-1所示
图4-4-1画图板打开图片
5.橡皮擦
打开画图板,当绘制好的图形不满意时即可选择橡皮擦按钮擦拭图形,效果如4-5-1所示
图4-5-1画图板橡皮擦
6.图像属性
打开画图板之后选择图像,点击之后选择图像属性,即可查看打开图片的属性信息,如像素等。
效果如下4-6-1所示
图4-6-1画图板图像属性
5.问题及解决方案
1、问题:
图片的大小不能随picturebox的大小改变而改变。
解决方案:
将picturebox的sizemode属性值改为zoom。
2、问题:
一开始的代码
privatevoidtoolStripButton10_Click(objectsender,EventArgse)
pen.Color=colorDialog1.Color;
if(colorDialog1.Color!
=Color.Black)
toolStripButton10.BackColor=colorDialog1.Color;
toolStripButton10.BackColor=Color.Silver;
不能使颜色按钮的背景颜色与所选颜色同步。
if(colorDialog1.ShowDialog()==DialogResult.OK)
toolStripButton10.BackColor=Color.Silver;
缺少dialogresult的判断,所以背景颜色一直默认为灰色。
3、问题:
当撤销到最后一步时,撤销图标任然可以点,但不起作用,重做也类似。
缺少这样一段代码if(now.Count!
撤销ToolStripMenuItem.Enabled=true;
撤销toolStripButton.Enabled=true;
if(history.Count!
重做ToolStripMenuItem.Enabled=true;
重做toolStripButton.Enabled=true;
判断是否已到最后一步
6.总结
此软件基本达到理想效果,在编写这一软件的过程中我学到了很多C#编程知识,并学会了如何快速的改正程序中的错误。
经过一段时间的课程设计,C#编程方面的知识收获很大,但这只是C#编程知识的冰山一角,还有很多东西没有学到。
这次课程设计受益匪浅,不仅锻炼了我做事坚持不懈的心态,也慢慢地培养了我不懂就查书的好习惯,我的自学能力也有了一定的提高,我更明白了搞计算机这行,要学到真正的技术完全要靠自己,在课堂上只能学到最基本的东西,但这最基本的东西也一定要学好。
在以后的工作学习中,我还会将更多的时间与精力投入到C#的学习中,不断为自己所学的知识补充新鲜血液。
7.参考文献
[1]《VisualC#.NET程序设计教程》罗福强白忠建人民邮电出版社2009年3月。
[2]《C#3.0从基础到项目实践》李海涛化学工业出版社2001年
[3]《C#典型模块开发》周峰中国铁道出版社2004年
[4]《C#开发实战1200例》王军王晓科清华大学出版社2005年
[5]《C#编程语言程序设计与开发》陈钟刘强张高清华大学出版社2003年9月1日
[6]《c#实用教程》郑阿奇梁敬东钱晓军电子工业出版社2009年
[7]《C#可视化程序设计案例教程》刘培林史荧中黄羽机械工业出版社
[8]《VisualC#2005程序设计教程》刘培林史荧中黄羽北京机械工业出版社2007.1
[9]《C#课程设计》段德亮余键张仁才清华大学出版社2008.6
[10]扶松柏:
《深入体验C#项目开发》,清华大学出版社,2011
[11]张孝祥:
《C#基础与案例开发详解》,清华大学出版社,2009.7
[12]段德亮:
《C#课程设计案例精编》,清华大学出版社,2008.4
[13]吴绍兴:
《亮剑C#项目开发案例导航》,电子工业出版社,2012.
[14]郑宇军:
《C#语言程序设计基础》清华大学出版社,2011.10
[15]于润伟等编著.《C#项目实训教程》.电子工业出版社,2009.2