源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685web
画图工具函数
1. 画直线工具
Ø 增长‘直线’菜单项,创建类向导;spa
Ø 对CXXXXXXView类增长成员变量my_draw_flag.并在构造函数中初始化为0.net
Ø 在‘直线’菜单项处理函数中,将my_draw_flag=1;表示画直线code
Ø 增长window消息处理,WM_LBUTTONDOWN 和WM_MOUSEMOVE和WM_LBUTTONUPorm
Ø 增长成员变量blog
在构造函数里初始化为0;ip
增长int型成员变量OnLButtonDownRunFlag,OnLButtonUpRunFlag。并在View类的构造函数中进行初始化为0;ci
增长IplImage型成员变量
Ø 在OnLButtonDown(UINT nFlags, CPoint point)函数中,保存鼠标按下时的点:
my_cvpoint1=cvPoint(point.x,point.y);
OnLButtonDownRunFlag=1;
OnLButtonUpRunFlag=0;
bufImg=cvCloneImage(workImg);//bufImg是为了保存每次画图结束后的图像。
Ø 在OnMouseMove(UINT nFlags, CPoint point)函数中,编辑代码以下:
if(OnLButtonDownRunFlag&&OnLButtonUpRunFlag==0)
{
CvPointiner_point=cvPoint(point.x,point.y);
IplImage*src;
if(!workImg)
{
return;
}
intthickness,colorR,colorG,colorB;
thickness=2;//线条宽度
colorR=0;
colorG=255;
colorB=0;
src=cvCloneImage(bufImg);
switch(my_draw_flag)
{
case0:
break;
case1:
cvFlip(src);
cvLine(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);
cvFlip(src);
workImg=cvCloneImage(src);//显示当前一条直线
Invalidate();//重绘
break;
}
cvReleaseImage(&src);
}
CScrollView::OnMouseMove(nFlags,point);
Ø 鼠标按下的消息处理函数
void CCVMFCView::OnLButtonUp(UINTnFlags, CPoint point)
OnLButtonUpRunFlag=1;
OnLButtonDownRunFlag=0;
画矩形
1. 添加画‘矩形’菜单项
2. 设置属性以下:
3. 创建类向导,编辑消息响应函数:
void CCVMFCView::OnMyDrawRectangle()
{
//TODO: Add your command handler code here
my_draw_flag=2;
}
4. 在mousemove消息响应函数里,添加
cvFlip(src);
cvRectangle(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);
cvFlip(src);
workImg=cvCloneImage(src);//显示当前的矩形
Invalidate();//重绘
画圆
添加菜单的步骤同添加矩形的步骤:
关键是编写case 3:的代码
case 3:
int r=0;
r=(int)sqrt((iner_point.x-my_cvpoint1.x)*(iner_point.x-my_cvpoint1.x)
+(iner_point.y-my_cvpoint1.y)*(iner_point.y-my_cvpoint1.y));
cvFlip(src);
cvCircle(src,my_cvpoint1,r,cvScalar(colorB,colorG,colorR),thickness);
cvFlip(src);
workImg=cvCloneImage(src);//显示当前的矩形
Invalidate();//重绘
break;
from:http://blog.csdn.net/nupt123456789/article/details/7100144