MFC 对话框中的picture control 控件显示图片
2015-10-23 16:26
323 查看
MFC读取图片一般使用自定义的DIB文件。DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作。
DIB文件下载路径:DIB文件下载
MFC显示图片有几种方法:
1.在运行界面上选择 文件-打开 或者 直接点击打开快捷键
条件是在xxxDoc.cpp文件中加入
这样,上述操作就可以显示图片了。
![](https://img-blog.csdn.net/20151023154554176)
第二种方法,在对话框的picture control控件显示图片。
这种方法稍微麻烦。
首先在菜单栏编辑自己的菜单,比如本项目中 “图像匹配”,在下拉菜单下编辑“图像匹配”并修改ID号 :ID_IMAGEMATCH,然后为此菜单添加事件处理程序,选择类是View类。
然后再在资源视图中Dialog下插入dialog对话框。在上面加入几个picture control 控件。底部加入几个button控件。对话框属性的Border属性选为Resizing,这样对话框的大小就可以使用鼠标调节。修改对话框的控件的ID。
效果如下图:
![](https://img-blog.csdn.net/20151023160027090)
接着为对话框添加类:CDlgImageMatchYG
匹配的事件响应程序就可以这样写:
在事件处理程序中调用对话框对象。
在CDlgImageMatchYG类文件中,有几个函数比较重要。
OnPaint()函数,本函数由对话框对象自动调用,刷新对话框。
CalImageLocation(),自定义的设置对话框的控件位置和大小的函数。
本项目源码下载路径:mfc显示图片源码
DIB文件下载路径:DIB文件下载
MFC显示图片有几种方法:
1.在运行界面上选择 文件-打开 或者 直接点击打开快捷键
条件是在xxxDoc.cpp文件中加入
BOOL Cimageskitch0Doc::OnSaveDocument(LPCTSTR lpszPathName) { // TODO: 在此添加专用代码和/或调用基类 //+*****保存DIB图像 CString strPathName; strPathName.Format("%s",lpszPathName); //+*****新建文件 CFile file(strPathName,CFile::modeCreate|CFile::modeWrite); if(m_dib.WriteToFile(&file) == TRUE) { SetModifiedFlag(FALSE); // have saved return TRUE; } else return FALSE; //return CDocument::OnSaveDocument(lpszPathName); } BITMAPINFO CreateBitmapInfo(cv::Mat workImg) // 建立位图信息 { BITMAPINFOHEADER BIH={40,1,1,1,8,0,0,0,0,0,0}; BITMAPINFO bmi; int bits, colors; RGBQUAD ColorTab[256]; if(CV_8UC3==workImg.type()) { bits=24; } if(CV_8UC1==workImg.type()) { bits=8; } if(bits>8) colors=0; else colors=1<<bits; BIH.biWidth =workImg.cols; BIH.biHeight =workImg.rows; BIH.biBitCount=(BYTE) bits; bmi.bmiHeader=BIH; if(bits==8) { // 256 色位图 for(int i=0;i<256;i++) { // 设置灰阶调色板 ColorTab[i].rgbRed=ColorTab[i].rgbGreen=ColorTab[i].rgbBlue=(BYTE)i; } memcpy(bmi.bmiColors,ColorTab, 1024); } return(bmi); }
这样,上述操作就可以显示图片了。
第二种方法,在对话框的picture control控件显示图片。
这种方法稍微麻烦。
首先在菜单栏编辑自己的菜单,比如本项目中 “图像匹配”,在下拉菜单下编辑“图像匹配”并修改ID号 :ID_IMAGEMATCH,然后为此菜单添加事件处理程序,选择类是View类。
然后再在资源视图中Dialog下插入dialog对话框。在上面加入几个picture control 控件。底部加入几个button控件。对话框属性的Border属性选为Resizing,这样对话框的大小就可以使用鼠标调节。修改对话框的控件的ID。
效果如下图:
接着为对话框添加类:CDlgImageMatchYG
匹配的事件响应程序就可以这样写:
void CImageMatchingView::OnImagematch() { // TODO: Add your command handler code here CImageMatchingDoc* pDoc = GetDocument(); //pDoc = GetDocument(); // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推) if(pDoc->m_pDibInit->m_nColorTableEntries != 256) //pDoc->m_pDibInit在pDoc中初始化 { // 提示用户 MessageBox("目前只支持256色位图的图象配准!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 返回 return; } // 打开图象识别对话框 CDlgImageMatchYG* pDlg = new CDlgImageMatchYG(NULL, pDoc); pDlg->DoModal(); delete pDlg; }
在事件处理程序中调用对话框对象。
在CDlgImageMatchYG类文件中,有几个函数比较重要。
OnPaint()函数,本函数由对话框对象自动调用,刷新对话框。
CalImageLocation(),自定义的设置对话框的控件位置和大小的函数。
本项目源码下载路径:mfc显示图片源码
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- MFC之ComboBox控件用法实例教程
- 如何让页面在打开时自动刷新一次让图片全部显示
- 上传图片时JS自动显示图片
- MFC绘制不规则窗体的方法
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- MFC实现全屏功能代码实例
- 使用VS2010创建MFC ActiveX工程项目
- js 鼠标移动显示图片的简单实例
- Android 网络图片查看显示的实现方法
- C++中MFC Tab Control控件的使用详解
- MFC程序设计常用技巧汇总