素材巴巴 > 程序开发 >

MFC实战篇——“另存为对话框”和“打开对话框”——读写float型数据——二进制文件中

程序开发 2023-09-12 18:25:21

文章目录


在这里插入图片描述

1. 另存为对话框

MFC弹出保存对话框,将float型Mat数据写入二进制文件:

void CProp1::OnBnClickedButton6()
 {// TODO: 在此添加控件通知处理程序代码//另存为://默认文件名:KB_Y-M-D_h-m-s.datSYSTEMTIME str;GetLocalTime(&str);CString  fileName;CString head = _T("KB");CString cs = _T("-");CString cs1 = _T("_");CString cs2 = _T(".dat");//用当前时间创建默认图片名称fileName.Format(_T("%s%s%2d%s%02d%s%02d%s%02d%s%02d%s%02d%s"), head, cs1, str.wYear, cs, str.wMonth, cs, str.wDay, cs1, str.wHour, cs, str.wMinute, cs, str.wSecond, cs2);BOOL bOpenFileDialog = FALSE;//格式:过滤器描述符(显示作用)+  + 文件扩展名称(过滤作用)//多个扩展名称之间用(;)分隔,两个过滤字符串之间以分隔//最后的过滤器需要以两个结尾TCHAR BASED_CODE szFilter[] = _T("二进制文件(*.dat)|*.dat|");//bOpenFileDialog   TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。//lpszDefExt         指定默认的文件扩展名。//lpszFileName       指定默认的文件名。//dwFlags            指明一些特定风格。//lpszFilter         是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。//pParentWnd         为父窗口指针。CFileDialog fileDlg(bOpenFileDialog, _T("dat"), fileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);CString strFilePath;// 显示保存文件对话框   if (IDOK == fileDlg.DoModal()){	//取文件名全称,包括完整路径。strFilePath = fileDlg.GetPathName();}//CString-->const char*const char* fileKB;char temp[100];::wsprintfA(temp, "%ls", (LPCTSTR)strFilePath);fileKB = temp;MessageBox(CString(fileKB));//打开文件FILE* fileKBP = fopen(fileKB, "w+b");if (fileKBP == NULL){CFileException ex;TCHAR szError[1024];ex.GetErrorMessage(szError, 1024);MessageBox(szError);return;}Mat M4 = Mat(20, 20, CV_32FC1, Scalar::all(0.32));cout << "M4 = " << endl <(i);fwrite((char*)p, sizeof(float), M4.cols, fileKBP);}fclose(fileKBP);
 }
 


在这里插入图片描述

2. 打开对话框

2.1 读取到数组中

MFC弹出打开对话框,将二进制文件写入float型Mat数据中:

void CProp1::OnBnClickedButton6()
 {// TODO: 在此添加控件通知处理程序代码/******************************打开对话框*************************************/CString fileName = L"";BOOL bOpenFileDialog = TRUE;//格式:过滤器描述符(显示作用)+  + 文件扩展名称(过滤作用)//多个扩展名称之间用(;)分隔,两个过滤字符串之间以分隔//最后的过滤器需要以两个结尾TCHAR BASED_CODE szFilter[] = _T("二进制文件(*.dat)|*.dat|");//bOpenFileDialog   TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。//lpszDefExt         指定默认的文件扩展名。//lpszFileName       指定默认的文件名。//dwFlags            指明一些特定风格。//lpszFilter         是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。//pParentWnd         为父窗口指针。CFileDialog fileDlg(bOpenFileDialog, _T("dat"), fileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);CString strFilePath;// 显示打开文件对话框   if (IDOK == fileDlg.DoModal()){//取文件名全称,包括完整路径。strFilePath = fileDlg.GetPathName();}//CString-->const char*const char* fileKB;char temp[100];::wsprintfA(temp, "%ls", (LPCTSTR)strFilePath);fileKB = temp;MessageBox(CString(fileKB));//打开文件FILE* fileKBP = fopen(fileKB, "rb");if (fileKBP == NULL){CFileException ex;TCHAR szError[1024];ex.GetErrorMessage(szError, 1024);MessageBox(szError);return;}//读float型数据float buffer[20 * 20];fread(&buffer, 4, (size_t)(20*20), fileKBP);for (size_t i = 0; i < 400; i++){float a = buffer[i];}fclose(fileKBP);
 }
 

在这里插入图片描述
不知道为啥读出来的float型数据0.32变成了0.319999993。精度提高了。

如果有人晓得,请讲一下。Σ(っ °Д °;)っ

在这里插入图片描述

2.2 读取到Mat中

void CProp1::OnBnClickedButton6()
 {// TODO: 在此添加控件通知处理程序代码/******************************打开对话框*************************************/CString fileName = L"";BOOL bOpenFileDialog = TRUE;//格式:过滤器描述符(显示作用)+  + 文件扩展名称(过滤作用)//多个扩展名称之间用(;)分隔,两个过滤字符串之间以分隔//最后的过滤器需要以两个结尾TCHAR BASED_CODE szFilter[] = _T("二进制文件(*.dat)|*.dat|");//bOpenFileDialog   TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。//lpszDefExt         指定默认的文件扩展名。//lpszFileName       指定默认的文件名。//dwFlags            指明一些特定风格。//lpszFilter         是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。//pParentWnd         为父窗口指针。CFileDialog fileDlg(bOpenFileDialog, _T("dat"), fileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);CString strFilePath;// 显示打开文件对话框   if (IDOK == fileDlg.DoModal()){//取文件名全称,包括完整路径。strFilePath = fileDlg.GetPathName();}//CString-->const char*const char* fileKB;char temp[100];::wsprintfA(temp, "%ls", (LPCTSTR)strFilePath);fileKB = temp;MessageBox(CString(fileKB));//打开文件FILE* fileKBP = fopen(fileKB, "rb");if (fileKBP == NULL){CFileException ex;TCHAR szError[1024];ex.GetErrorMessage(szError, 1024);MessageBox(szError);return;}Mat M4 = Mat(20, 20, CV_32FC1);float* p = M4.ptr();//写float型数据到MAT中fread(p, sizeof(float), M4.cols*M4.rows, fileKBP);float a = 0;for (size_t i = 0; i < 20; i++){float* p = M4.ptr(i);for (size_t j = 0; j < 20; j++){a =p[j];}}fclose(fileKBP);
 }
 

在这里插入图片描述

数据0.32变成了0.319999993。精度提高了。

忙,不想深究了,如果有人晓得,请讲一下。Σ(っ °Д °;)っ


标签:

上一篇: python编程控制键盘鼠标 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。