长沙网站制作培训基地,四库一平台建造师业绩查询,南郑县城乡建设局网站,公司注册如何网上核名上一篇#xff1a; [图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示 文章目录 前言完整代码重要代码效果 前言
上一篇实现了MFC通过Picture控件载入图片。 这一篇实现ROI功能的第一部分#xff0c;在Picture控件中#xff0c;通过鼠标拖拽画出一个矩形。
完…上一篇 [图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示 文章目录 前言完整代码重要代码效果 前言
上一篇实现了MFC通过Picture控件载入图片。 这一篇实现ROI功能的第一部分在Picture控件中通过鼠标拖拽画出一个矩形。
完整代码
MFC简单的图片处理工程-Gitee
重要代码
鼠标左键按下事件记录左键按下时的坐标。
void CGDITESTDlg::OnLButtonDown(UINT nFlags, CPoint point)
{ClientToScreen(point);GetDlgItem(IDC_PIC_DISPLAY)-GetWindowRect(rc_dsp);if (rc_dsp.PtInRect(point)) //判断鼠标左键落下时point是否在控件的rect范围内{m_startPt point;}CDialogEx::OnLButtonDown(nFlags, point);
}鼠标左键抬起事件记录左键抬起时的坐标并在Picture控件的DC中绘制矩形
void CGDITESTDlg::OnLButtonUp(UINT nFlags, CPoint point)
{CRect rect;int rect_width 0;int rect_height 0;CPoint sel_pos;//GetCursorPos(sel_pos);ClientToScreen(point);GetDlgItem(IDC_PIC_DISPLAY)-GetWindowRect(rc_dsp);if (rc_dsp.PtInRect(point) m_IsChoose)//判断鼠标左键抬起时point是否在控件的rect范围内{//ClipCursor(rc_dsp);//计算ROI的topleft和rightbottom坐标if(point.x m_startPt.x)m_endPt.x point.x rc_dsp.right? point.x:rc_dsp.right;elsem_endPt.x point.x rc_dsp.left ? point.x : rc_dsp.left;if (point.y m_startPt.y)m_endPt.y point.y rc_dsp.bottom ? point.y : rc_dsp.bottom;elsem_endPt.y point.y rc_dsp.top ? point.y : rc_dsp.top;
#if 1CPoint tplt, rtbt;tplt.x m_startPt.x m_endPt.x ? m_startPt.x : m_endPt.x;tplt.y m_startPt.y m_endPt.y ? m_startPt.y : m_endPt.y;rtbt.x m_startPt.x m_endPt.x ? m_startPt.x : m_endPt.x;rtbt.y m_startPt.y m_endPt.y ? m_startPt.y : m_endPt.y;m_ctl_pic_dsp.ScreenToClient(tplt);m_ctl_pic_dsp.ScreenToClient(rtbt);CDC* pDC m_ctl_pic_dsp.GetWindowDC();CPen pen(PS_SOLID, 1, RGB(255,0,0));pDC-SelectStockObject(NULL_BRUSH);pDC-SelectObject(pen);pDC-Rectangle(CRect(tplt, rtbt));
#else//这里我本想在获取ROI的框选坐标后通过dlg的OnPaint()函数来画矩形// 所以使用了以下两个函数激活OnPaint()// 但是却无法在picture控件上画矩形// 百度了一下原因是要在picture控件的dc中画而不是在dialog的dc中画。//Invalidate(); //清空窗口的客户区激活OnPaint()//SendMessage(WM_PAINT); //激活OnPaint()
#endif}CDialogEx::OnLButtonUp(nFlags, point);
}
效果