MFC中如何在一个picture 控件中显示一张opencv读入的图片? 100
我设置了一个按钮时触发读入图片然后在picture控件中显示,代码如下:voidCVideoThreadDlg::OnBnClickedButton1(){IplImag...
我设置了一个按钮时触发读入图片然后在picture控件中显示,代码如下:
void CVideoThreadDlg::OnBnClickedButton1()
{
IplImage* img_src = cvLoadImage("img4.jpg",CV_LOAD_IMAGE_GRAYSCALE);
ShowImage(img_src, IDC_STATIC_PIC);
}
在控件中显示图像的函数:
void CVideoThreadDlg::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); */
}
这样写控件中不显示img_src指针指向的图像。
将BUTTON1 的函数改成如下:
void CVideoThreadDlg::OnBnClickedButton1()
{
CString m_strPicPath;
IplImage* TheImage;
CFileDialog dlg(true,_T("img4.JPG"),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);
ShowImage(TheImage, IDC_STATIC_PIC);
}
即手动添加图片文件,就能在控件中显示图片了。。这是为什么,我需要的是上一种的显示图像的方法,不要手动添加的。求大神帮忙改一下。 展开
void CVideoThreadDlg::OnBnClickedButton1()
{
IplImage* img_src = cvLoadImage("img4.jpg",CV_LOAD_IMAGE_GRAYSCALE);
ShowImage(img_src, IDC_STATIC_PIC);
}
在控件中显示图像的函数:
void CVideoThreadDlg::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); */
}
这样写控件中不显示img_src指针指向的图像。
将BUTTON1 的函数改成如下:
void CVideoThreadDlg::OnBnClickedButton1()
{
CString m_strPicPath;
IplImage* TheImage;
CFileDialog dlg(true,_T("img4.JPG"),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);
ShowImage(TheImage, IDC_STATIC_PIC);
}
即手动添加图片文件,就能在控件中显示图片了。。这是为什么,我需要的是上一种的显示图像的方法,不要手动添加的。求大神帮忙改一下。 展开
4个回答
展开全部
VC6新建MFC(.exe)基于对话框工程Test,添加一个picture控件(改资源号为IDC_STATIC_PIC)和一个按钮,具体实现如下程序。 核心的实现代码如下 // 用于在控件 ID上显示图片 imgvoid CTestDlg::DrawPicToHDC(IplImage *img,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-02-13 · 知道合伙人互联网行家
关注
展开全部
以前学opencv是时用过picture显示图片,代码十几行 不怎么美观,最后我发现opencv里只有一个函数带Hdc,好像是DrawToHDC()既然出现了HDC我想在mfc里绘图就不用说了。如果你没用CvvImage类,那么声明一个CvvImage对象CopyOf一下再DrawToHDC到mfc的任何地方都可以。
CvvImage::CopyOf
CvvImage::DrawToHDC;,
CvvImage::CopyOf
CvvImage::DrawToHDC;,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以前学opencv是时用过picture显示图片,代码十几行 不怎么美观,最后我发现opencv里只有一个函数带Hdc,好像是DrawToHDC()既然出现了HDC我想在mfc里绘图就不用说了。如果你没用CvvImage类,那么声明一个CvvImage对象CopyOf一下再DrawToHDC到mfc的任何地方都可以。
CvvImage::CopyOf
CvvImage::DrawToHDC;,
CvvImage::CopyOf
CvvImage::DrawToHDC;,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询