1. 程式人生 > >載入PICTURE控制元件

載入PICTURE控制元件

MFC-----在MFC中使用Picture控制元件載入任意圖片 - Mr.Easy - 部落格園

  1. 新建一個基於對話方塊的MFC程式(姑且命名為myImage),並新增一個Picture控制元件到對話方塊中,修改ID號為:IDC_STATIC_PIC。為使Picture控制元件更美觀,可將其屬性設定為:Client Edge:True。

2. 新增按鈕,可命名為“載入影象”,修改ID號為ID_BUTTON_IMG。雙擊按鈕,跳到myImageDlg.cpp檔案,開始編輯按鈕訊息響應函式。該按鈕功能為載入圖片並顯示到Picture控制元件上。

void CmyPointerRecognitionDlg::OnBnClickedButtonDetect()

{
   // TODO: Add your control notification handler code here

CString m_strPicPath;

IplImage* TheImage;

CFileDialog dlg(true,_T(".bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
          _T("image file(
.bmp;.jpg)|.bmp;.jpg|All Files(.)|.*|"),NULL);  //彈出選擇圖片對話方塊
  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);
  if(TheImage!=NULL)
   {
    ShowImage(TheImage, IDC_STATIC_PIC);
  }

}

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 CmyImageDlg::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);

}

mfc使用opencv時CImage(CvvImage)取消以後的替代方法及error C2039: “DrawToHDC”: 不是“ATL::CImage”的成員 - vsooda的專欄 - CSDN部落格