MFC打开图片

打开图片方法通过获取图片路径,可以打开文件夹选择其中一张图片,也可以通过循环得到多张图片,还可以通过打开文件夹获取整个文件夹下的所有图片

1.打开文件夹选择多张图片

void Ocr::OnBnClickedButtonOpenpic()
{
	TCHAR szFilter[] = _T("bmp文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg||");
	//文件类型说明和扩展名间用 | 分隔,每种文件类型间用 | 分隔,末尾用 || 指明。
	CFileDialog fileDlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, szFilter, this);

	//CFileDialog构造一个CFileDialog对象
	/*
	第1个参数:TRUE为打开文件对话框;FALSE为保存文件对话框
	2:  指定默认的文件扩展名。
	3:指定默认的文件名。
	4:指明一些特定风格。
	5:是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。
	6:为父窗口指针。
	*/

	if (fileDlg.DoModal() != IDOK)     //没有点确定按钮
		return;
	POSITION pos = fileDlg.GetStartPosition();

    //POSITION就是MFC的迭代器(iterator),
    //GetStartPosition是取第一个迭代器,
    //GetNextAssoc是取出当前元素然后向后移动迭代器

	while (pos != NULL)
	{
		int nCount = 0;
		CString szPathName = fileDlg.GetNextPathName(pos);
		//CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
		TRACE(_T("%s/n"), szPathName);
		nCount++;
		
		//CString转string
		USES_CONVERSION;
		string ss(W2A(szPathName));
        
        //Mat为OpenCV类,将图片保存到vector<Mat> imgs容器中
		Mat imgg = imread(ss);
		imgs.push_back(imgg);
        
        //将图片路径更新到edit控件中
		m_edit0.SetSel(-1);//选择编辑框正文
		m_edit0.ReplaceSel(szPathName + ";");
		//m_edit1.SetWindowTextA(szPathName);
		//UpdateData(false);
			
	}
}

效果如图所示:

2.打开单张图片(也可通过1介绍的只选择一张图片)

void Ocr::OnBnClickedButtonOpenpic()
{
	
	// TODO: 在此添加控件通知处理程序代码
	
	CString fileName;
	TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp||");
	CFileDialog fileDlg(TRUE, _T("jpg"), NULL, 0, szFilter, this);

	if (fileDlg.DoModal() != IDOK)     //没有点确定按钮,返回
	return;

	fileName = fileDlg.GetPathName();
	string tempName = (LPCSTR)CStringA(fileName);

	Mat imgg = imread(tempName);
	imgs.push_back(imgg);

	m_edit0.SetWindowText(fileName);
        UpdateDate(false);
}

猜你喜欢

转载自blog.csdn.net/kangshuaibing/article/details/84642943