[求助][已解决]MFC+OpenCV在子窗体中显示图片 20160312
来源:互联网 发布:超女网络海选冥月 编辑:程序博客网 时间:2024/05/16 12:14
程序预期功能:
在父窗体中画一个按键(Button1),点击按键(Button1)然后跳出子窗体(son_window_IDD_DIALOG_BG),显示图像。(OPEN/CLOSE是用来打开和关闭摄像头的,father_window里面的image control控件用于显示视频,三者和本次问题无关)
目前遇到的问题是:
我不知道怎么配置CDC/HDC/CRECT/CWND之类的参数。
如图,双击屏幕之后,程序停止。
代码如下(仅我有修改部分):
在子窗体.cpp中的全局变量
IplImage* src = cvLoadImage("D:\\PERSONAL\\VC++\\OpenCV\\image\\hy2head.jpg");//OpenCV里面的加载图像语句CRect rect; CDC *pDC; HDC hDC; CWnd *pwnd;
在子窗体.cpp中的OnLButtonDblClk中
void CTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值pwnd = GetDlgItem(IDC_ShowImage); pDC =pwnd->GetDC(); <span style="font-family: Arial, Helvetica, sans-serif;">//DEBUG中,这里开始出错 </span>hDC= pDC->GetSafeHdc(); pwnd->GetClientRect(&rect); CvvImage m_CvvImage; // OpenCV中的显示类 m_CvvImage.CopyOf(src,1); // <span style="font-family: Arial, Helvetica, sans-serif;">OpenCV中的显示用函数</span> m_CvvImage.DrawToHDC(hDC, &rect); // <span style="font-family: Arial, Helvetica, sans-serif;">OpenCV中的显示用的</span>CDialogEx::OnLButtonDblClk(nFlags, point);}
问题总结:
1. 在子窗体里面有没有初始化函数?我在类向导里面没有找到。该怎么初始化呢?
2.以下
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
参考http://blog.csdn.net/yam_killer/article/details/7661449
都是什么用途?网上查阅之后,大概理解就是
DC是设备描述表,一种包含设备信息的数据结构。
HDC是DC的句柄,API中的一个类似指针的数据类型。 我的理解是:用来标识每一个窗口的,相当于编号。
CDC是MFC的DC的一个类我理解不了了,它和DC有什么不一样?
窗体显示的过程大概是什么样?需要哪些步骤?以及这些名词都是代表什么意义?有没有谁可以简单的解释一下各种关系?
3.我想试试是不是DC、HDC配置错了,所以在父窗体中运行了一个例子,但是通过了,也不知道为啥。
父窗体下功能是:
点击(OPEN),显示图像。
代码如下(也仅我有修改部分)
父窗体.cpp文件中的全局变量
IplImage* src = cvLoadImage("D:\\PERSONAL\\VC++\\OpenCV\\image\\hy2head.jpg");CRect rect; CDC *pDC; HDC hDC; CWnd *pwnd;
// TODO: 在此添加额外的初始化代码pwnd = GetDlgItem(IDC_ShowImage); pDC =pwnd->GetDC(); hDC= pDC->GetSafeHdc(); pwnd->GetClientRect(&rect);
void CsubwindowDlg::OnClickedButtonOpen(){// TODO: 在此添加控件通知处理程序代码 // 测试 CvvImage m_CvvImage; m_CvvImage.CopyOf(src,1); m_CvvImage.DrawToHDC(hDC, &rect); // 设置计时器,每10ms触发一次事件 }
void CsubwindowDlg::OnClickedButtonClose(){// TODO: 在此添加控件通知处理程序代码ReleaseDC(pDC);}
麻烦大家看一下啦,谢谢。
最后,语文不好~废话较多。。见谅
***问题原因和解决方案***
子窗体.cpp文件中的 pwnd = GetDlgItem(IDC_STATIC); IDC_STATIC一开始写错了,使得返回的pwnd是空指针。
注意从新配置如下
在子窗体.cpp中的OnLButtonDblClk中
void CTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值<span style="color:#ff0000;">pwnd = GetDlgItem(<span style="font-family: 'lucida Grande', Verdana, 'Microsoft YaHei'; font-size: 14px; line-height: 23px;">IDC_STATIC</span>); //这里如果返回空指针会出错。</span>pDC =pwnd->GetDC(); <span style="font-family: Arial, Helvetica, sans-serif;">//DEBUG中,这里开始出错 </span>hDC= pDC->GetSafeHdc(); pwnd->GetClientRect(&rect); CvvImage m_CvvImage; // OpenCV中的显示类 m_CvvImage.CopyOf(src,1); // <span style="font-family: Arial, Helvetica, sans-serif;">OpenCV中的显示用函数</span> m_CvvImage.DrawToHDC(hDC, &rect); // <span style="font-family: Arial, Helvetica, sans-serif;">OpenCV中的显示用的</span>CDialogEx::OnLButtonDblClk(nFlags, point);}
同时,在父窗体的图片显示控件的IDD在子窗体中不能识别,会使pwnd得到空指针。
0 0
- [求助][已解决]MFC+OpenCV在子窗体中显示图片 20160312
- Opencv在MFC中显示图片
- OpenCV读取图片在MFC中显示的问题
- opencv中的图片对象显示在mfc控件中
- 我的那些子窗体如何在添加了图片框的父窗体中显示?
- 在Windows窗体中显示OpenCV图像
- mfc控件中显示opencv图片
- MFC+opencv显示图片
- 使用treeView在主窗体中显示子窗体
- 子窗体在父窗体指定的控件中显示
- C# 子窗体在父窗体中显示位置
- Opencv ImlImage 在MFC中显示
- 使用OpenCV在MFC中显示图像
- 在MFC中显示opencv图像
- 在MFC框架中使用opencv打开、处理图片及显示原图问题
- 在MFC对话框中显示图片的三种方法(有两种使用OpenCv)
- 【C++ MFC+opencv】打开文件夹中的图片并在picture控件中显示
- opencv调用摄像头在mfc控件中显示黑屏问题的解决
- HTML5总结
- C#函数式编程之标准高阶函数
- Android基础知识之控件系列(2)——Button及自定义背景
- LeakCanary:让内存泄漏无所遁形
- 数独
- [求助][已解决]MFC+OpenCV在子窗体中显示图片 20160312
- POJ 2288 Islands and Bridges(状压dp)
- C# 中的"yield"使用
- Web存储——cookie
- 8086 汇编
- PHP_mySQL_通过php代码+sql查询语句读取数据库信息
- nyoj 三个水杯
- 蓦然回首-面向对象
- ColorStateList实现TextView文字按下时颜色变化