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编程控制键盘鼠标
下一篇:
相关文章
-
无相关信息