如何使用MFC图片控件显示本地图片

要使用mfc图片控件显示本地图片,有两种方法。
1.利用CvvImage和IplImage 格式的图片,将其输出到控件中。
2.将opencv窗口嵌入到图片控件中,直接显示opencv格式的图片

方法1:需要用到
#include ;
using namespace cv;
以及cvvimage.h,cvvimage.h&cpp在opencv后续版本没有,需要在网上找到代码手动添加进去。
按钮事件函数添加如下代码

void CMFCApplication2Dlg::OnBnClickedButton3()
{
	IplImage*src = cvLoadImage("1.bmp");
	CDC *pDC21 = GetDlgItem(IDC_abc)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针 
	HDC hdc21 = pDC21->GetSafeHdc();                      // 获取设备上下文句柄
	CRect re21; // 矩形类 
	GetDlgItem(IDC_abc)->GetClientRect(&re21); //获取box21客户区 
	CvvImage cimg21; IplImage *src21; // 定义IplImage指针变量src //src = cvLoadImage("1.bmp", -21); // 将src指向当前工程文件目录下的图像1.bmp    
	src21 = src;
	cimg21.CopyOf(src21, src21->nChannels);
	cimg21.DrawToHDC(hdc21, &re21); //输出图像 
	ReleaseDC(pDC21);
	cimg21.Destroy();

}

方法2:
1.在cXXdlg.h头文件,cXXDlg类的public成员里定义 CRect rect1;//新建矩形
如何使用MFC图片控件显示本地图片_第1张图片
2.在Dlg.cpp,初始化函数BOOL CXXDlg::OnInitDialog()中加入如下代码。

// TODO: 在此添加额外的初始化代码
	CWnd  *pWnd1 = GetDlgItem(IDC_abc);//CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。
	pWnd1->GetClientRect(&rect1);//GetClientRect为获得控件相自身的坐标大小
	namedWindow("view", WINDOW_AUTOSIZE);//设置窗口名
	HWND hWndl = (HWND)cvGetWindowHandle("view");//hWnd 表示窗口句柄,获取窗口句柄
	HWND hParent1 = ::GetParent(hWndl);//GetParent函数一个指定子窗口的父窗口句柄
	::SetParent(hWndl, GetDlgItem(IDC_abc)->m_hWnd);
	::ShowWindow(hParent1, SW_HIDE);//ShowWindow指定窗口中显示
	//view窗口表示图片控件abc

3.按钮事件函数添加如下代码

void CXXDlg::OnBnClickedButton3()
{
	Mat srcimg = imread("1.bmp");
	resize(srcimg, srcimg, Size(rect1.right, rect1.bottom),0 ,0 ,INTER_AREA);  //把原图变为控件框规格大小,缩小图片用INTER_AREA好,放大图片用INTER_CUBIC好
	namedWindow("view");//定义一个img窗口  
    imshow("view", srcimg);
}

结果如下
如何使用MFC图片控件显示本地图片_第2张图片

你可能感兴趣的:(博文)