c++课程设计报告简易图像处理.docx
- 文档编号:11755960
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:21
- 大小:93.78KB
c++课程设计报告简易图像处理.docx
《c++课程设计报告简易图像处理.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告简易图像处理.docx(21页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 报告 简易 图像 处理