源代碼地址: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