c++课程设计报告简易图像处理.docx

上传人:b****5 文档编号:11755960 上传时间:2023-03-31 格式:DOCX 页数:21 大小:93.78KB
下载 相关 举报
c++课程设计报告简易图像处理.docx_第1页
第1页 / 共21页
c++课程设计报告简易图像处理.docx_第2页
第2页 / 共21页
c++课程设计报告简易图像处理.docx_第3页
第3页 / 共21页
c++课程设计报告简易图像处理.docx_第4页
第4页 / 共21页
c++课程设计报告简易图像处理.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

c++课程设计报告简易图像处理.docx

《c++课程设计报告简易图像处理.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告简易图像处理.docx(21页珍藏版)》请在冰豆网上搜索。

c++课程设计报告简易图像处理.docx

c++课程设计报告简易图像处理

目录

第一章绪论1

第二章设计思路1

第三章软件设计步骤2

3.1设置线形功能的设计错误!

未定义书签。

3.2选择线宽功能的设计5

3.3选择图形功能的设计6

3.4画刷功能的设计13

3.5最小化窗口问题的改善14

第四章心得与体会17

附录18

致谢18

参考文献19

第一章绪论

Internet画板的基本功能包括基本图形绘制和填充(直线、椭圆、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。

此外,该画板是基于计算机网络的在线画图系统。

该软件从几何学性质出发,使用较为成熟的面向对象C++语言作为画板的开发工具,在网络传输中采用了多线程技术,解决了用户与用户通过合作式学习软件进行学习,讨论问题。

I

第二章设计思路

 

设置选择线形功能(实线,虚线)

设置线宽功能(1,3,5)

简易图形处理程序

选择颜色功能

选择图形功能(圆,椭圆,矩形,画笔)

画刷功能

第三章软件设计步骤

3.1设置线形功能的设计

1.新建一个MFC单文档程序,取名为Draw

2.在CDrawView类中添加一个成员变量p1,用于记录画线的第一个点

右键单击-->AddMemberVariable-->

VariableTypeCPoint

VariableNamep1

Accessprivate

再添加第二个成员变量p2,用于记录画线的第二个点

右键单击-->AddMemberVariable-->

VariableTypeCPoint

VariableNamep2

Accessprivate

3.在类视图CDrawView类上单击鼠标右键,选择AddWindowsMessageHandler

单击WM_LButtonDown,然后再单击“AddHandler”按钮

单击WM_MouseMove,然后再单击“AddHandler”按钮

单击WM_LButtonUp,然后再单击“AddHandler”按钮

4.在CDrawView类中添加一个私有变量:

Intx;//表示线形,x=0表示实线,x=1表示虚线

并初始化对象x=0;

5.双击menu文件夹中IDR_MAINFRAME项

就可以在在menu中添加菜单栏线形,在子菜单中分别建立实线,虚线(同上),通过建立类向导在CDrawView类分别加入两个功能函数Onshixian(),Onxuxian()

voidCDrawView:

:

Onshixian()

{

//TODO:

Addyourcommandhandlercodehere

x=0;

}

voidCDrawView:

:

Onxuxian()

{

//TODO:

Addyourcommandhandlercodehere

x=1;

}

5.在构造函数中,即CDrawView:

:

CDrawView()中加代码:

CDrawView:

:

CDrawView()

{

//TODO:

addconstructioncodehere

p1=p2=-1;//初始化成-1,表示未点下鼠标左键

}

6.在OnLButtonDown中添加代码

voidCDrawView:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

p1=p2=point;

CView:

:

OnLButtonDown(nFlags,point);

}

7.voidCDrawView:

:

OnLButtonUp(UINTnFlags,CPointpoint)

{//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CClientDCdc(this);//创建画图对象dc

dc.SetROP2(R2_NOTXORPEN);//设置画线方式

dc.MoveTo(p1);dc.LineTo(p2);//画线,消去鼠标移动事件画的线

p2=point;

CPenpen;//定义画笔对象

pen.CreatePen(x,1,RGB(0,0,255));//创建画笔为实线,线宽为1个像素兰颜色画笔

CPen*oldpen=(CPen*)dc.SelectObject(pen);

dc.MoveTo(p1);dc.LineTo(p2);//画线

dc.SelectObject(pen);//恢复原来的画笔

p1.x=-1;

}

8.在OnMouseMove中添加代码

voidCDrawView:

:

OnMouseMove(UINTnFlags,CPointpoint)

{//TODO:

Addyourmessagehandlercodehereand/orcalldefault

if(p1.x>0)

{

CClientDCdc(this);

dc.SetROP2(R2_NOTXORPEN);//设置画线方式

dc.MoveTo(p1);dc.LineTo(p2);//画线,消去前一次鼠标移画的线

p2=point;//记录下新点

dc.MoveTo(p1);dc.LineTo(p2);//画线

}

}

3.2选择线宽功能的设计

1.在CDrawView类中添加一个私有变量:

Inty;//表示线的宽度

并初始化y=1;

2.双击menu文件夹中IDR_MAINFRAME项

就可以在在menu中添加菜单栏线宽,在子菜单中分别建立线宽1,3,5通过建立类向导在CDrawView类分别加入两个功能函数On1(),On3(),On5()

voidCDrawView:

:

On1()

{

//TODO:

Addyourcommandhandlercodehere

y=1;

}

voidCDrawView:

:

On3()

{

//TODO:

Addyourcommandhandlercodehere

y=3;

}

voidCDrawView:

:

On5()

{

//TODO:

Addyourcommandhandlercodehere

y=5;

}

3.在voidCDrawView:

:

OnLButtonUp(UINTnFlags,CPointpoint)中

pen.CreatePen(x,1,RGB(0,0,O))中1用y来代替

3.3.选择颜色功能的设计

1.在CDrawView类中添加一个私有变量:

COLORREFcolor;//表示颜色

并初始化color=RGB(0,0,0);//黑色

2.双击menu文件夹中IDR_MAINFRAME项

就可以在在menu中添加菜单栏颜色,在子菜单中建立选择颜色,通过建立类向导在CDrawView类中添加Oncolor()函数

voidCDrawView:

:

Oncolor()

{

//TODO:

Addyourcommandhandlercodehere

CColorDialogdig;

dig.DoModal();

color=dig.GetColor();

}

3.在voidCDrawView:

:

OnLButtonUp(UINTnFlags,CPointpoint)中pen.CreatePen(x,1,RGB(0,0,O))中RGB(0,0,0)用变量color来代替代

3.3选择图形功能的设计

1.在CDrawView类中添加一个私有变量:

Intshape;//shape=0表示线,shape=1表示椭圆,shape=2表示矩形,shape=3表示圆,shape=4表示画笔

并初始化shape=0;

2.建立以个SHAPE类

structSHAPE

{

CPointp1,p2;

intshape;

intwidth;

intpenstyle;

intr;

COLORREFcolor;

COLORREFc;

SHAPE*next;

intda;

};同时在CDrawView中定义变量:

intwidth;

intpenstyle;intda;

2.双击menu文件夹中IDR_MAINFRAME项

就可以在在menu中添加菜单栏图形,在子菜单中建立椭圆,矩形,圆,画笔,通过建立类向导在CDrawView类中添加Online(),Ontuoyuan(),Onrectangle(),Oncircle(),Onpen()函数

voidCDrawView:

:

Online()

{

//TODO:

Addyourcommandhandlercodehere

shape=0;

}

voidCDrawView:

:

Ontuoyuan()

{

//TODO:

Addyourcommandhandlercodehere

shape=1;

}

voidCDrawView:

:

Onrectangle()

{

//TODO:

Addyourcommandhandlercodehere

shape=2;

}

voidCDrawView:

:

circle()

{

//TODO:

Addyourcommandhandlercodehere

shape=3;

}

voidCDrawView:

:

Onpen()

{

//TODO:

Addyourcommandhandlercodehere

shape=4;

}

3.在OnLButtonUp()函数中添加代码

CClientDCdc(this);//创建画图对象

dc.SetROP2(R2_NOTXORPEN);//设置画线方式

CPenpen;//定义画笔对象

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)

{

HBRUSHhb=(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);

CView:

:

OnLButtonUp(nFlags,point);

}

if(shape==2)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

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)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=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)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(brush);

dc.MoveTo(p1);dc.LineTo(point);

p1=point;

dc.MoveTo(p1);dc.LineTo(point);

}

p2=point;

SHAPE*pTemp;

pTemp=newSHAPE;

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()函数中添加代码

CClientDCdc(this);

dc.SetROP2(R2_NOTXORPEN);//设置画线方式

CPenpen;//定义画笔对象

pen.CreatePen(x,y,color);//创建画笔为实线,线宽为1个像素兰颜色画笔

dc.SelectObject(pen);

if(p1.x>0)

{

if(shape==0)

{

dc.MoveTo(p1);dc.LineTo(p2);//画线,消去前一次鼠标移动事件画线

p2=point;//记录下新点

dc.SetROP2(R2_COPYPEN);//设置画线方式

dc.MoveTo(p1);dc.LineTo(p2);//画线

}

if(shape==1)

{

HBRUSHhb=(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)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

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

}

if(shape==3)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(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)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(brush);

dc.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()函数

voidCDrawView:

:

Onhuashua()

{

shape=5;

CColorDialogdig;

dig.DoModal();

f=dig.GetColor();

}

3.在OnLButtonDown()函数中添加代码

p1=p2=point;

CView:

:

OnLButtonDown(nFlags,point);

if(shape==4)

{

CClientDCdc(this);

CBrushbrush;

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()函数中添加代码

voidCDrawView:

:

OnDraw(CDC*pDC)

{

CDrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CPenpen;//定义画笔对象

pen.CreatePen(pTemp->penstyle,pTemp->width,pTemp->color);//创建画笔为实线,线宽为1个像素兰颜色画笔

dc.SelectObject(pen);

SHAPE*pTemp

While(head!

=NULL)

{

if(shape==0)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(brush);

dc.MoveTo(pTemp->p1);dc.LineTo(pTemp->p2);//画线,消去鼠标移动事件画线

dc.MoveTo(p1);dc.LineTo(p2);//画线

CView:

:

OnLButtonUp(nFlags,point);

}

if(shape==1)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(brush);

dc.Ellipse(pTemp->p1.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)

{

HBRUSHhb=(HBRUSH)GetStockObject(NULL_BRUSH);

CBrush*brush=CBrush:

:

FromHandle(hb);

CBrush*pOldBrush=dc.SelectObject(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)

{

HBRUSHhb=(HBRUSH)GetStockObject(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)

{HBRUSHhb=(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