“OpenCV 파일 저장기능 구현(http://deios.kr/401)”에 파일 저장기능과 파일 열기기능을 강화해 보도록 하겠습니다.
먼저 “새 이름으로 저장”시 자동으로 확장자를 추가하기 위해서 OnFileSaveAs함수를 수정하겠습니다.
수정 전
CFileDialog dlgFile(TRUE); CString fileName; const int c_cMaxFiles = 100; const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1; dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize); dlgFile.GetOFN().nMaxFile = c_cbBuffSize; int chk = dlgFile.DoModal(); fileName.ReleaseBuffer(); if(chk == IDOK){ pDoc->OnSaveDocument(dlgFile.GetPathName()); }
수정 후
CString strFilter = TEXT("JPEG files(*.jpg, *.jpeg, *.jpe) | *.jpg; *.jpeg; *.jpe |\ Portable Network Graphics file(*.png) | *.png |\ Windows Bitmap files(*.bmp, *.dib) | *.bmp; *.dib |\ Sun resters(*.sr, *.ras) | *.sr; *.ras |\ TIFF files(*.tiff, *.tif) | *.tiff; *.tif |\ 지원하는 모든 영상 파일 | *.jpg; *.jpeg; *.jpe; *.png; *.bmp; *.dib; *.sr; *.ras; *.tiff; *.tif || "); CFileDialog dlgFile(FALSE, TEXT("jpg"), NULL, OFN_OVERWRITEPROMPT, strFilter, this); if(IDOK == dlgFile.DoModal()) { pDoc->OnSaveDocument(dlgFile.GetPathName()); }
새 이름으로 저장 부분만 수정하면 뭔가 아쉬우니 파일 열기 부분도 확장자가 자동으로 들어가게 수정해 봅시다.
void CMFC_OpenCVApp::OnFileOpen() { // TODO: 여기에 명령 처리기 코드를 추가합니다. CString strFilter = TEXT("JPEG files(*.jpg, *.jpeg, *.jpe) | *.jpg; *.jpeg; *.jpe |\ Portable Network Graphics file(*.png) | *.png |\ Windows Bitmap files(*.bmp, *.dib) | *.bmp; *.dib |\ Sun resters(*.sr, *.ras) | *.sr; *.ras |\ TIFF files(*.tiff, *.tif) | *.tiff; *.tif |\ 지원하는 모든 영상 파일 | *.jpg; *.jpeg; *.jpe; *.png; *.bmp; *.dib; *.sr; *.ras; *.tiff; *.tif || "); CFileDialog dlgFile(TRUE, TEXT("jpg"), TEXT("*.jpg"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, strFilter); if(IDOK == dlgFile.DoModal()) { POSITION pos = dlgFile.GetStartPosition(); while(pos) OpenDocumentFile(dlgFile.GetNextPathName(pos)); } }
이젠 다음과 같은 깔끔한 불러오기 & 저장 Dialog를 볼 수 있습니다.
cfile29.uf.12248E3B4D2600FF0E7A9C.pdfcfile7.uf.192619444D2603C109885B.zip