1、c+课程设计报告简易图像处理目录第一章 绪论 1第二章 设计思路 1第三章 软件设计步骤 23.1设置线形功能的设计 错误!未定义书签。3.2选择线宽功能的设计 53.3选择图形功能的设计 63.4画刷功能的设计 133.5 最小化窗口问题的改善 14第四章 心得与体会 17附录 18致谢 18参考文献 19第一章 绪论Internet画板的基本功能包括基本图形绘制和填充(直线、椭圆、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。此外,该画板是基于计算机网络的在线画图系统。该软件从几何学性质出发,使用较为成熟的面向对象C+语言作为画板的开发工具,在网络传输
2、中采用了多线程技术,解决了用户与用户通过合作式学习软件进行学习,讨论问题。I第二章 设计思路设置选择线形功能(实线,虚线)设置线宽功能(1,3,5) 简易图形处理程序选择颜色功能选择图形功能(圆,椭圆,矩形,画笔)画刷功能第三章 软件设计步骤3.1设置线形功能的设计1.新建一个MFC单文档程序,取名为Draw2.在CDrawView类中添加一个成员变量p1,用于记录画线的第一个点右键单击-Add Member Variable-Variable Type CPointVariable Name p1Access private再添加第二个成员变量p2,用于记录画线的第二个点右键单击-Add M
3、ember Variable-Variable Type CPointVariable Name p2Access private3.在类视图CDrawView类上单击鼠标右键,选择Add Windows Message Handler单击WM_LButtonDown,然后再单击“Add Handler”按钮单击WM_MouseMove,然后再单击“Add Handler”按钮单击WM_LButtonUp,然后再单击“Add Handler”按钮4.在CDrawView类中添加一个私有变量: Int x;/表示线形,x=0表示实线,x=1表示虚线 并初始化对象x=0;5.双击menu文件夹中I
4、DR_MAINFRAME项就可以在在menu中添加菜单栏线形,在子菜单中分别建立实线,虚线(同上),通过建立类向导在CDrawView类分别加入两个功能函数Onshixian(),Onxuxian()void CDrawView:Onshixian() / TODO: Add your command handler code here x=0;void CDrawView:Onxuxian() / TODO: Add your command handler code herex=1;5在构造函数中,即CDrawView:CDrawView()中加代码:CDrawView:CDrawView
5、()/ TODO: add construction code herep1=p2=-1; /初始化成-1,表示未点下鼠标左键6在OnLButtonDown中添加代码void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultp1=p2=point;CView:OnLButtonDown(nFlags, point);7. void CDrawView:OnLButtonUp(UINT nFlags, CPoint po
6、int) / TODO: Add your message handler code here and/or call default CClientDC dc(this); /创建画图对象dc dc.SetROP2(R2_NOTXORPEN); /设置画线方式 dc.MoveTo(p1); dc.LineTo(p2); /画线,消去鼠标移动事件画的线 p2=point; CPen pen; /定义画笔对象 pen.CreatePen(x,1,RGB(0,0,255); /创建画笔为实线,线宽为1个像素兰颜色画笔 CPen *oldpen=(CPen *)dc.SelectObject(pen
7、); dc.MoveTo(p1); dc.LineTo(p2); /画线 dc.SelectObject(pen); /恢复原来的画笔 p1.x=-1;8. 在OnMouseMove中添加代码void CDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(p1.x0) CClientDC dc(this); dc.SetROP2(R2_NOTXORPEN); /设置画线方式 dc.MoveTo(p1); dc.LineT
8、o(p2); /画线,消去前一次鼠标移画的线 p2=point; /记录下新点 dc.MoveTo(p1); dc.LineTo(p2); /画线 3.2选择线宽功能的设计1.在CDrawView类中添加一个私有变量:Int y;/表示线的宽度并初始化y=1;2双击menu文件夹中IDR_MAINFRAME项就可以在在menu中添加菜单栏线宽,在子菜单中分别建立线宽1,3,5通过建立类向导在CDrawView类分别加入两个功能函数On1(),On3(),On5()void CDrawView:On1() / TODO: Add your command handler code here y=
9、1;void CDrawView:On3() / TODO: Add your command handler code here y=3;void CDrawView:On5() / TODO: Add your command handler code here y=5;3.在void CDrawView:OnLButtonUp(UINT nFlags, CPoint point)中pen.CreatePen(x,1,RGB(0,0,O)中1用y来代替3.3.选择颜色功能的设计1. 在CDrawView类中添加一个私有变量:COLORREF color;/表示颜色并初始化color=RGB
10、(0,0,0);/黑色2. 双击menu文件夹中IDR_MAINFRAME项就可以在在menu中添加菜单栏颜色,在子菜单中建立选择颜色,通过建立类向导在CDrawView类中添加Oncolor()函数void CDrawView:Oncolor() / TODO: Add your command handler code here CColorDialog dig; dig.DoModal(); color=dig.GetColor();3. 在void CDrawView:OnLButtonUp(UINT nFlags, CPoint point)中pen.CreatePen(x,1,RG
11、B(0,0,O)中RGB(0,0,0)用变量color来代替代3.3选择图形功能的设计1. 在CDrawView类中添加一个私有变量:Int shape;/shape=0表示线,shape=1表示椭圆,shape=2表示矩形,shape=3表示圆,shape=4表示画笔并初始化shape=0;2建立以个SHAPE类struct SHAPE CPoint p1,p2; int shape; int width; int penstyle; int r; COLORREF color; COLORREF c; SHAPE *next; int da;同时在CDrawView中定义变量:int wi
12、dth; int penstyle; int da;2. 双击menu文件夹中IDR_MAINFRAME项就可以在在menu中添加菜单栏图形,在子菜单中建立椭圆,矩形,圆,画笔,通过建立类向导在CDrawView类中添加Online(),Ontuoyuan(),Onrectangle(),Oncircle(),Onpen()函数void CDrawView:Online() / TODO: Add your command handler code here shape=0;void CDrawView:Ontuoyuan() / TODO: Add your command handler
13、code here shape=1;void CDrawView:Onrectangle() / TODO: Add your command handler code here shape=2;void CDrawView:circle() / TODO: Add your command handler code here shape=3;void CDrawView:Onpen() / TODO: Add your command handler code here shape=4;3.在OnLButtonUp()函数中添加代码CClientDC dc(this); /创建画图对象 dc
14、.SetROP2(R2_NOTXORPEN); /设置画线方式CPen pen; /定义画笔对象pen.CreatePen(x,y,color); /创建画笔dc.SelectObject(pen);if(shape=0)dc.MoveTo(p1); dc.LineTo(p2); /画线,消去鼠标移动事件画的线 p2=point; dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.MoveTo(p1); dc.LineTo(p2); /画线 CView:OnLButtonUp(nFlags, point);if(shape=1) HBRUSH hb=(HBRUSH)GetS
15、tockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush); dc.Ellipse(p1.x,p1.y,p2.x,p2.y); p2=point; dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Ellipse(p1.x,p1.y,p2.x,p2.y); CView:OnLButtonUp(nFlags, point); if(shape=2) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRU
16、SH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush);dc.Rectangle(p1.x,p1.y,p2.x,p2.y); p2=point; dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Rectangle(p1.x,p1.y,p2.x,p2.y); CView:OnLButtonUp(nFlags, point); if(shape=3) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *bru
17、sh=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush);dc.Ellipse(p1.x-r,p1.y-r,p1.x+r,p1.y+r);dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Ellipse(p1.x-r,p1.y-r,p1.x+r,p1.y+r); if(shape=4) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.
18、SelectObject(brush);dc.MoveTo(p1); dc.LineTo(point);p1=point; dc.MoveTo(p1); dc.LineTo(point); p2=point;SHAPE *pTemp;pTemp=new SHAPE;pTemp-p1=p1; pTemp-p2=p2;pTemp-penstyle=penstyle;pTemp-shape=shape;pTemp-width=width;pTemp-r=r;pTemp-color=color;pTemp-next=head;head=pTemp;p1.x=-1;4.在OnMouseMove()函数中
19、添加代码CClientDC dc(this);dc.SetROP2(R2_NOTXORPEN); /设置画线方式CPen pen; /定义画笔对象pen.CreatePen(x,y,color); /创建画笔为实线,线宽为1个像素兰颜色画笔dc.SelectObject(pen);if(p1.x0)if(shape=0)dc.MoveTo(p1); dc.LineTo(p2); /画线,消去前一次鼠标移动事件画线p2=point; /记录下新点dc.SetROP2(R2_COPYPEN); /设置画线方式dc.MoveTo(p1); dc.LineTo(p2);/画线if(shape=1)HB
20、RUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *brush=CBrush:FromHandle(hb);CBrush *pOldBrush = dc.SelectObject(brush);dc.Ellipse(p1.x,p1.y,p2.x,p2.y);p2=point;dc.SetROP2(R2_COPYPEN); /设置画线方式dc.Ellipse(p1.x,p1.y,p2.x,p2.y);if(shape=2)HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *brush=CBru
21、sh:FromHandle(hb);CBrush *pOldBrush = dc.SelectObject(brush);dc.Rectangle(p1.x,p1.y,p2.x,p2.y);p2=point; /记录下新点dc.SetROP2(R2_COPYPEN); /设置画线方式dc.Rectangle(p1.x,p1.y,p2.x,p2.y);if(shape=3)HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *brush=CBrush:FromHandle(hb);CBrush *pOldBrush = dc.SelectObj
22、ect(brush);r=(int)sqrt(p1.x-point.x)*(p1.x-point.x)+(p1.y-point.y)*(p1.y-point.y);dc.Ellipse(p1.x-r,p1.y-r,p1.x+r,p1.y+r);dc.Ellipse(p1.x-r,p1.y-r,p1.x+r,p1.y+r);if(shape=4)HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *brush=CBrush:FromHandle(hb);CBrush *pOldBrush = dc.SelectObject(brush);dc.
23、MoveTo(p1); dc.LineTo(point);p1=point;dc.MoveTo(p1); dc.LineTo(point);3.4画刷功能的设计1.令shape=5表示选择画刷2.双击menu文件夹中IDR_MAINFRAME项就可以在在menu中添加菜单栏画刷,在子菜单中建立填充栏,通过建立类向导在CDrawView类中添加Onhuashua()函数void CDrawView:Onhuashua() shape=5; CColorDialog dig; dig.DoModal(); f=dig.GetColor();3.在OnLButtonDown()函数中添加代码p1=p
24、2=point; CView:OnLButtonDown(nFlags, point); if(shape=4) CClientDC dc(this); CBrush brush; CBrush *old_Brush; brush.CreateSolidBrush(f); old_Brush=dc.SelectObject(&brush); dc.FloodFill(p1.x,p1.y,c); dc.SetROP2(R2_COPYPEN); 3.5 最小化窗口问题的改善在OnDraw()函数中添加代码void CDrawView:OnDraw(CDC* pDC) CDrawDoc* pDoc=
25、GetDocument(); ASSERT_VALID(pDoc);CPen pen; /定义画笔对象 pen.CreatePen(pTemp-penstyle,pTemp-width,pTemp-color); /创建画笔为实线,线宽为1个像素兰颜色画笔 dc.SelectObject(pen);SHAPE *pTempWhile(head!=NULL)if(shape=0) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.Sel
26、ectObject(brush);dc.MoveTo(pTemp-p1); dc.LineTo(pTemp-p2); /画线,消去鼠标移动事件画线 dc.MoveTo(p1); dc.LineTo(p2); /画线CView:OnLButtonUp(nFlags, point); if(shape=1) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush); dc.Ellipse(pTemp-p1.
27、x,pTemp-p1.y,pTemp-p2.x,pTemp-p2.y); p2=point; dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Ellipse(p1.x,p1.y,p2.x,p2.y);dc.Ellipse(p1.x,p1.y,p2.x,p2.y); CView:OnLButtonUp(nFlags, point); if(shape=2) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.Sele
28、ctObject(brush);dc.Rectangle(pTemp-p1.x,pTemp-p1.y,pTemp-p2.x,pTemp-p2.y); p2=point; dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Rectangle(pTemp-p1.x,pTemp-p1.y,pTemp-p2.x,pTemp-p2.y);dc.Rectangle(pTemp-p1.x,pTemp-p1.y,pTemp-p2.x,pTemp-p2.y); CView:OnLButtonUp(nFlags, point); if(shape=3) HBRUSH hb=(HBRUSH)Ge
29、tStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush); dc.Ellipse(pTemp-p1.x-r,pTemp-p1.y-r,pTemp-p1.x+r,pTemp-p1.y+r);dc.SetROP2(R2_COPYPEN); /设置画线方式 dc.Ellipse(pTemp-p1.x-r,pTemp-p1.y-r,pTemp-p1.x+r,pTemp-p1.y+r); if(shape=4) HBRUSH hb=(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *brush=CBrush:FromHandle(hb); CBrush *pOldBrush = dc.SelectObject(brush);dc.MoveTo(pTemp-p1); dc.LineTo(pTemp-po
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1