我使用.NET DateTime来获取当前的日期和时间.我将其转换为一个字符串以用作文件名的一部分.问题是OpenCV命令保存一个图像需要一个char *不是一个字符串类型,而DateTime只会输出一个String ^类型.我该如何使这项工作?代码未完成
- String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
- IplImage* toSave;
- CvCapture* capture = cvCreateCameraCapture(0);
- toSave = cvQueryFrame( capture );
- cvSaveImage(nowString,toSave);
- cvReleaseImage(&toSave);
- cvReleaseCapture(&capture);
解决方法
你最好的办法是使用StringToHGlobalAnsi.这里是完整的代码,显示它的完成和记忆释放分配的内存.
- using namespace System::Runtime::InteropServices;
- void MethodName()
- {
- String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
- IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(nowString);
- try
- {
- CvCapture* capture = cvCreateCameraCapture(0);
- IplImage* toSave = cvQueryFrame(capture);
- cvSaveImage(static_cast<char*>(ptrToNativeString.ToPointer()),toSave);
- cvReleaseImage(&toSave);
- cvReleaseCapture(&capture);
- }
- catch (...)
- {
- Marshal::FreeHGlobal(ptrToNativeString);
- throw;
- }
- Marshal::FreeHGlobal(ptrToNativeString);
- }
你可能想重新考虑使用文件名中的“:”字符,因为我不相信Windows非常喜欢这样.