mfc中显示图片,顺便把怎么弄出打开文件弹出窗口也发了

 我来答
伍千凡vJ
2013-10-31 · 超过58用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:109万
展开全部
句柄名设置为 OnBnClickedReadimg,主要的响应操作包括弹出对话框选择图片文件、读入图片文件、对图片统一缩放至256*256的大小、显示图像,代码如下:// TODO: Add your control notification handler code here// 选项图片的约定 CFileDialog dlg(TRUE, _T("*.bmp"),NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, _T("image files (*.bmp; *.jpg) |*.bmp; *.jpg | All Files (*.*) |*.*||"),NULL);// 打开文件对话框的标题名 dlg.m_ofn.lpstrTitle= _T("Open Image");// 判断是否获得图片if( dlg.DoModal()!= IDOK )return;// 获取图片路径 CString mPath = dlg.GetPathName();// 读取图片、缓存到一个局部变量 ipl 中 IplImage* ipl = cvLoadImage( mPath,1);// 判断是否成功读取图片 if(!ipl )return;// 对上一幅显示的图片数据清零if( TheImage ) cvZero( TheImage );// 对读入的图片进行缩放,使其宽或高最大值者刚好等于 256,再复制到 TheImage 中 ResizeImage( ipl );// 调用显示图片函数 ShowImage( TheImage, IDC_ShowImg );// 释放 ipl 占用的内存 cvReleaseImage(&ipl );其中包含了两个新的成员函数 ResizeImage 和 ShowImage,前者的作用是对读入的不同大小的图像进行缩放,再通过设置 ROI 的方式将图像存入 256*256 的 TheImage 中;后者是将图像 TheImage 显示到图片显示控件 IDC_ShouImg 窗口的正中部位。(int)(256-nh)/2:0; // 设置 TheImage 的 ROI 区域,用来存入图片 img cvSetImageROI( TheImage, cvRect( tlx, tly, nw, nh)); // 对图片 img 进行缩放,并存入到 TheImage 中 cvResize( img, TheImage ); // 重置 TheImage 的 ROI 准备读入下一幅图片 cvResetImageROI( TheImage );} void CmymfcDlg::ShowImage( IplImage* img, UINT ID )// ID 是Picture Control控件的ID号{// 获得显示控件的 DC CDC* pDC = GetDlgItem( ID )->GetDC();// 获取 HDC(设备句柄) 来进行绘图操作 HDC hDC = pDC ->GetSafeHdc(); CRect rect; GetDlgItem(ID)->GetClientRect(&rect );// 求出图片控件的宽和高int rw = rect.right- rect.left;int rh = rect.bottom- rect.top;// 读取图片的宽和高int iw = img->width;int ih = img->height;// 使图片的显示位置正好在控件的正中int tx =(int)(rw - iw)/2;int ty =(int)(rh - ih)/2; SetRect( rect, tx, ty, tx+iw, ty+ih );// 复制图片 CvvImage cimg; cimg.CopyOf( img );// 将图片绘制到显示控件的指定区域内 cimg.DrawToHDC( hDC,&rect ); ReleaseDC( pDC );}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式