在Visual Studio 200X下,CString直接轉換成const char* 有點困難,下面是自己用的一種可行方案:
//得到目錄路徑
CString mPath=dlg.GetPathName();
//將目錄路徑轉換成絕對路徑以便cvLoadImage調用
int m=mPath.GetLength();
for(int index=0;index<m;index++)
{
if(mPath.GetAt(index)=='\\')
{
mPath.Insert(index,'\\');
index++;
}
}
//將CString轉換成LPCTSTR
LPCTSTR p=mPath.GetBuffer();
/*
將LPCTSTR轉換為const char *,因為Unicode的問題,LPCTSTR1、在非UNICODE環境下為 const char * 2、在UNICODE環境下為
const unsigned short *
在情況2時需要藉助API函數WideCharToMultiByte
int WideCharToMultiByte( UINT CodePage, // code page DWORD dwFlags, // performance and mapping flags LPCWSTR lpWideCharStr, // wide-character string int cchWideChar, // number of chars in string LPSTR lpMultiByteStr, // buffer for new string int cbMultiByte, // size of buffer LPCSTR lpDefaultChar, // default for unmappable chars LPBOOL lpUsedDefaultChar // set when default char used);
*/
DWORD dwMinSize;
dwMinSize=WideCharToMultiByte(CP_ACP,NULL,p,-1,NULL,0,NULL,FALSE);
char * pp=new char[dwMinSize];
WideCharToMultiByte(CP_OEMCP,NULL,p,-1,pp,dwMinSize,NULL,FALSE);
//讀取映像
IplImage* ip1=cvLoadImage(pp,-1);