问题背景:需要自动化的连续的处理500张图,一个一个地处理显然很幼稚,因此需要一个连续处理图像的函数。
CString m_strFileOut = _T(""); //初始化适应Unicode
TCHAR szSelected[MAX_PATH];//用来存放文件夹路径
BROWSEINFO bi;
LPITEMIDLIST pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szSelected;
bi.lpszTitle = _T("选择输出文件路径");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = NULL;
if((pidl = SHBrowseForFolder(&bi)) != NULL)
{
if(SUCCEEDED(SHGetPathFromIDList(pidl, szSelected))) //得到文件夹的全路径,不要的话,只得本文件夹名
{
m_strFileOut = szSelected; //获得文件夹的全路径
}
}
执行完这段代码后m_strFileOut就保存了文件夹路径名。
/******************************************************************
* 函数名:EnumFiles
* 参数 :LPCTSTR lpPath 目标文件夹, LPCTSTR lpExt 要搜索的文件
名,留空表示所有文件
* 返回值:是否找到
* 功能描述:示例:EnumFiles("C:\\windows\\system32", "*.dll");
******************************************************************
bool EnumFiles(LPCTSTR lpPath, LPCTSTR lpExt)
{
char szFindCmd[MAX_PATH] = "";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
if (lpExt == NULL)
{
sprintf(szFindCmd, "%s\\*.*", lpPath);
}
else
{
sprintf(szFindCmd, "%s\\%s", lpPath, lpExt);
}
hFind = ::FindFirstFile(szFindCmd, &FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
return FALSE;
while(TRUE)
{
if(! (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// 找到的是文件,而不是文件夹
char szBuffer[MAX_PATH] = "";
sprintf(szBuffer, "%s\\%s", lpPath, FindFileData.cFileName);
// 找到的文件的路径是szBuffer,在这里加入你的图像处理代码
CString str;
str = szBuffer;
m_MyDib.LoadFile(str);
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
return TRUE;
}