在VC6.0中,用CFileDialog得到的文件路径是CString类型的,如果用它来打开图片,即用cvLoadImage的话,CString类型是不用转化的,是可以直接用的。
可是,如果你用CFileDialog得到的文件路径直接去打开视频文件的时候就会出现问题,比如用cvCaptureFromFile等读入视频文件就会出现返回的CvCapture类型总是为0的情况。而且,后面在用cvGetCaptureProperty的时候,得到的所有的CvCapture的属性都是为0的。
如何解决呢?就是将CString类型转化为char*类型就好多了。而且char*类型的当然也可以用在cvLoadImage里面了。
转换方法如下:
CString到char*:
filename.Replace(_T("http://www.cnblogs.com/carekee/admin/file://%22),_t(%22"));
char* fileName=(char*)filename.GetBuffer(filename.GetLength());
filename.ReleaseBuffer();
上面的filename=dlg.GetPathname()。转化之后的fileName就为char*类型的数据。在这,如果转化之后用cvCaptureFromFile打开视频文件的时候,返回的CvCapture仍然为0的话,请尝试安装视频解码器。建议安装K-Lite Mega Codec Pack,可以去迅雷去搜索k-lite。
char*到CString的转化方法就容易多了,只要用CString的Format方法格式化到CString中就可以了,就不在多说了。