[图像处理] MFC载入图片并绘制ROI矩形

上一篇:
[图像处理] 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;
		else
			m_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;
		else
			m_endPt.y = point.y > rc_dsp.top ? point.y : rc_dsp.top;
#if 1
		CPoint 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);
}

效果

在这里插入图片描述

相关推荐

  1. VTK图像处理--体绘制

    2024-04-08 07:04:04       29 阅读
  2. 记录mac图像处理

    2024-04-08 07:04:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 07:04:04       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 07:04:04       97 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 07:04:04       78 阅读
  4. Python语言-面向对象

    2024-04-08 07:04:04       88 阅读

热门阅读

  1. Docker 入门

    2024-04-08 07:04:04       28 阅读
  2. Git(8)之分支间同步特定提交

    2024-04-08 07:04:04       31 阅读
  3. 【Linux】在 Linux 上模拟网络故障

    2024-04-08 07:04:04       30 阅读
  4. Prompt提示词——常见的Prompt框架

    2024-04-08 07:04:04       30 阅读
  5. EXCEL学习笔记

    2024-04-08 07:04:04       39 阅读
  6. Mybatis学习笔记:多表关联,懒加载,缓存

    2024-04-08 07:04:04       33 阅读
  7. C语言正则表达式 regnext regreplace regreplaceAll

    2024-04-08 07:04:04       31 阅读
  8. uniapp使用vuex

    2024-04-08 07:04:04       37 阅读
  9. 一点点安全资料:数通知识扩展

    2024-04-08 07:04:04       34 阅读
  10. LeetCode71

    2024-04-08 07:04:04       30 阅读