MFC CFileDialog使用

昨天,TG说要写一个保存图片的操作。虽然Halcon里提供了保存图片的函数write_image(Image : : Format,FillColor,FileName : )  但是仅依靠这个函数是无法实现界面友好的。因此要做出一个具有windows风格的保存操作,还是得使用MFC的东西。

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。


Header: afxdlgs.h

CFileDialog::CFileDialog

(
BOOL bOpenFileDialog,                                                \\TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。
LPCTSTR lpszDefExt = NULL,                                     \\指定默认的文件扩展名。
LPCTSTR lpszFileName = NULL,                                 \\指定默认的文件名, 可带上完整的文件路径_T("D:\\Visual Studio 2015\\Projects\\OpenCamHalcon\\MyPic.bmp")
DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,      \\指明一些特定风格。
LPCTSTR lpszFilter = NULL,                                         \\指明可供选择的文件类型和相应的扩展名。
CWnd* pParentWnd = NULL                                          \\为父窗口指针。
);

要完成write_image,还需要的参数 Format,FileName如何获取呢?

CFileDialog::GetFileExt()返回选定文件的扩展文件名

CFileDialog::GetFileName()返回选定文件的文件名

注意到write_image(ImageReduced1, "bmp", 0, "F:/视觉培训/机器视觉第1课/2.bmp");

LIntExport Herror write_image(const Halcon::Hobject &Image, const char *Format, Hlong FillColor, const char *FileName);

问题来了

1、路径中“\\”与"/"替换;      fileName.Replace(L"\\",L"/");

2、LPCTSTR与Char的转换;     char *file = T2A(fileName);

void COpenCamHalconDlg::OnBnClickedButtonSavePic()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	BOOL isOpen = FALSE;        //是否打开(否则为保存)  
	CString defaultDir = _T("D:\\Visual Studio 2015\\Projects\\OpenCamHalcon");   //默认打开的文件路径  
	CString fileName = L"test.bmp";         //默认打开的文件名  
	CString filter = L"位图(*.bmp)|*.bmp|jpg(*.jpg)|*.jpg||";   //文件过虑的类型  
	CFileDialog openFileDlg(isOpen,NULL, defaultDir+ "\\" +fileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL);
	INT_PTR result = openFileDlg.DoModal();
	if (result == IDOK) 
	{	
		fileName = openFileDlg.GetPathName();
		fileName.Replace(L"\\",L"/");
		switch (openFileDlg.m_ofn.nFilterIndex)
		{
		case 1:
			filter = L"bmp";
			break;
		case 2:
			filter = L"jpeg";
		}
		USES_CONVERSION;
		char *file = T2A(fileName);
		char *filterCH = T2A(filter);	
		write_image(Image, filterCH, 0, file);
	}
}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值