mfc工具栏打开按钮打开了一幅图片,怎么显示到另一个对话框的picture控件上? 5
voidCMainFrame::OnOpenP1(){CFileDialogdlg(TRUE,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN...
void CMainFrame::OnOpenP1()
{
CFileDialog dlg(TRUE, _T("*.bmp"), NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,_T("image files (*.bmp; *.jpg; *.tif; *.jpeg) |*.bmp; *.jpg; *.tif; *.jpeg | All Files (*.*) |*.*||"), NULL);
// 打开文件对话框的标题名
dlg.m_ofn.lpstrTitle = _T("Open Image");
// 判断是否获得图片
if( dlg.DoModal() != IDOK )
return;
// 获取图片路径
CString mPath = dlg.GetPathName();
// 读取图片、缓存到一个局部变量 ipl 中
ipl = cvLoadImage( mPath, 1);
// 判断是否成功读取图片
if( !ipl )
return;
CPaneDlg panedlg;
// 调用显示图片函数
panedlg.DrawPicToHDC(ipl, IDC_picture1);
} 展开
{
CFileDialog dlg(TRUE, _T("*.bmp"), NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,_T("image files (*.bmp; *.jpg; *.tif; *.jpeg) |*.bmp; *.jpg; *.tif; *.jpeg | All Files (*.*) |*.*||"), NULL);
// 打开文件对话框的标题名
dlg.m_ofn.lpstrTitle = _T("Open Image");
// 判断是否获得图片
if( dlg.DoModal() != IDOK )
return;
// 获取图片路径
CString mPath = dlg.GetPathName();
// 读取图片、缓存到一个局部变量 ipl 中
ipl = cvLoadImage( mPath, 1);
// 判断是否成功读取图片
if( !ipl )
return;
CPaneDlg panedlg;
// 调用显示图片函数
panedlg.DrawPicToHDC(ipl, IDC_picture1);
} 展开
2个回答
展开全部
你的代码使用openCV做的吧,检查下你的IDC_picture1是不是包含在CMainFrame
这个类中,如果没有,是没有办法把消息传递给你要显示图片的控件的,这种情况你根据你对话框的名字显示到对话框时OpenCV库里边有现成的函数可以调用,具体是什么我也记不太清楚了,我现在不做VC,只是以前用过。
再说下,MFC中picture控件只能显示256色图片,如果你想要显示16W色或者更高的,需要你自己画,Windows的API函数提供了的,效率也非常高
这个类中,如果没有,是没有办法把消息传递给你要显示图片的控件的,这种情况你根据你对话框的名字显示到对话框时OpenCV库里边有现成的函数可以调用,具体是什么我也记不太清楚了,我现在不做VC,只是以前用过。
再说下,MFC中picture控件只能显示256色图片,如果你想要显示16W色或者更高的,需要你自己画,Windows的API函数提供了的,效率也非常高
追问
我用的就是那个函数DrawPicToHDC(IplImage* img, UINT ID),在CMainFrame中怎么加载IDC_picture1?
追答
没有办法,只能你自己再封装下DrawPicToHDC这个函数,你的错误很明显的,你在CMainFrame这个类中运行程序,但对话框的类是CPaneDlg,而IDC_picture1是CPaneDlg所私有的不会共享的东西,你在CMainFrame中使用,所以CMainFram只认得这个IDC_picture1是一个数字,但是它并不知道它在哪,是个什么东西,因此我觉得你可以设置一个全局变量,在对话框的初始化函数中将图片的路径传递进来,直接显示
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果ipl是CMainFrame成员变量,那么,在另一个对话框中:
((CMainFrame *)AfxGetMainWnd())->ipl
就可以得到这个变量并进行显示了
更多追问追答
追问
我只是调用了对话框里的一个函数,那你说的这句话我该添加到具体哪个地方?
追答
这就是一个变量的访问,对话框函数直接这么用。
注意包含头文件#include mainfrm.h
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询