MFC加载PICTURE控件

  1. 新建一个基于对话框的MFC程序(姑且命名为myImage),并添加一个Picture控件到对话框中,修改ID号为:IDC_STATIC_PIC。为使Picture控件更美观,可将其属性设置为:Client Edge:True。
  2. 添加按钮,可命名为“加载图像”,修改ID号为ID_BUTTON_IMG。双击按钮,跳到myImageDlg.cpp文件,开始编辑按钮消息响应函数。该按钮功能为加载图片并显示到Picture控件上。
  3. 注意在myImage.cpp和myImage.h中添加头文件:#include<cv.h>和#include<highgui.h> 为方便编程最好加上:using namespace cv;
  4. 在按钮控件中显示代码

第一种方法
在解决方案的类视图(Class View)中右键单击CmyImageDlg类,选择“添加”->“添加成员函数”,在弹出的对话框中输入相应内容 函数类型:void,函数名:ShowImage ,成员变量:IplImage* img 和 UINT ID。点击“完成”,开始编辑函数体:

void C使用MFC学习opencvDlg::ShowImage(IplImage* img, UINT ID)
{
	CDC* pDC = GetDlgItem(ID)->GetDC();
	HDC hDC = pDC->GetSafeHdc();
	CRect rect;
	GetDlgItem(ID)->GetClientRect(&rect);
	SetRect(rect, rect.left, rect.top, rect.right, rect.bottom);
	CvvImage cimg;
	cimg.CopyOf(img);
	cimg.DrawToHDC(hDC, &rect);
	ReleaseDC(pDC);
}

按钮代码

CString m_strPicPath;
	IplImage* TheImage;
	CFileDialog dlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this);
	dlg.m_ofn.lpstrTitle = _T("open Image");
	if (dlg.DoModal() != IDOK)
		return;
	m_strPicPath = dlg.GetPathName();
	m_strPicPath.Replace(_T("//"), _T(""));
	TheImage = cvLoadImage((CT2CA)m_strPicPath, 1);
	//TheImage = cvLoadImage("caihong.jpg");
	if (TheImage != NULL)
	{
		ShowImage(TheImage, IDC_SRC_PIC);
	}

CvvImage头文件与cpp文件

mfc使用opencv时CImage(CvvImage)取消以后的替代方法及error C2039: “DrawToHDC”: 不是“ATL::CImage”的成员 - vsooda的专栏 - CSDN博客
第二种方法,不需要使用另外的cvvImage类,但是因为MFC和opencv都存在CImage,有可能指向不明确,所以定义CImage的时候要加上命名空间ATL::

	CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this);
	fileDlg.DoModal();
	//获取图片路径和图片名称
	CString strFilePath = fileDlg.GetPathName();
	CString strFileName = fileDlg.GetFileName();
	//判断路径不为空
	if (strFilePath == _T(""))
	{
		return;
	}
	ATL::CImage image;
	image.Load(strFilePath);
	CRect rectControl;                        //控件矩形对象
	CRect rectPicture;                        //图片矩形对象
	int x = image.GetWidth();
	int y = image.GetHeight();
	//Picture Control的ID为IDC_IMAGE
	CWnd  *pWnd = GetDlgItem(IDC_SRC_PIC);
	pWnd->GetClientRect(rectControl);
	CDC *pDc = GetDlgItem(IDC_SRC_PIC)->GetDC();
	SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
	rectPicture = CRect(rectControl.TopLeft(), CSize((int)rectControl.Width(), (int)rectControl.Height()));
	((CStatic*)GetDlgItem(IDC_SRC_PIC))->SetBitmap(NULL);
	//以下两种方法都可绘制图片
	//image.StretchBlt(pDc->m_hDC, rectPicture, SRCCOPY); //将图片绘制到Picture控件表示的矩形区域
	image.Draw(pDc->m_hDC, rectPicture);                //将图片绘制到Picture控件表示的矩形区域
	image.Destroy();
	pWnd->ReleaseDC(pDc);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值