MFC如何基于对话框动态打开jpg等格式的图片?

MFC如何基于对话框动态打开jpg等格式的图片?,第1张

MFC标准支持的只有BMP位图文件,打开其它格式图片需要GDI+支持。

具体你可以搜CImage类的使用,这个例子和文档很多,就不复制粘贴了。

http://wenku.baidu.com/view/49c89c0c6c85ec3a87c2c5ff.html

句柄名设置为 OnBnClickedReadimg,主要的响应 *** 作包括d出对话框选择图片文件、读入图片文件、对图片统一缩放至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 rectGetDlgItem(ID)->GetClientRect(&rect )// 求出图片控件的宽和高int rw = rect.right- rect.leftint rh = rect.bottom- rect.top// 读取图片的宽和高int iw = img->widthint ih = img->height// 使图片的显示位置正好在控件的正中int tx =(int)(rw - iw)/2int ty =(int)(rh - ih)/2SetRect( rect, tx, ty, tx+iw, ty+ih )// 复制图片 CvvImage cimgcimg.CopyOf( img )// 将图片绘制到显示控件的指定区域内 cimg.DrawToHDC( hDC,&rect )ReleaseDC( pDC )}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11797121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存