www.pudn.com > Particlefilter_code.zip > FileIO.cpp


///////////////////////////////////////////////////////////////////////////////////// 
// 
//	Convenient routines for writing/ reading	data 
//	 
//	XinFan	2003.5.26 
// 
///////////////////////////////////////////////////////////////////////////////////// 
#include "stdafx.h" 
#include  
#include "FileIO.h" 
#include "cv.h" 
/////////////////////////////////////////////////////////////////////////////////// 
//	Write CvMat, float data 
//	The first 8 bytes are two int32 number:width, height and data type(in bytes) 
//	 Here data type is indicated as 3 for convenience 
//	Then the data write in row order 
///////////////////////////////////////////////////////////////////////////////// 
bool WriteMat32F(const char* filename, void *data) 
{ 
	CvMat *mat = (CvMat *)data; 
	//Only processing float-typ data 
	if (CV_ARR_DEPTH(mat->type) != CV_32F) 
	{ 
		return false; 
	} 
	//Get raw data 
	int step; 
	CvSize size; 
	float *buffer; 
	cvGetRawData(mat, (unsigned char**)&buffer, &step, &size); 
	int element_size = 3; 
	//write file 
	FILE *fp; 
	fp = fopen(filename, "wb"); 
	if (fp == 0) 
		return false; 
	//Write width and height 
	fwrite(&size, sizeof(CvSize), 1, fp); 
	//Write data type 
	fwrite(&element_size, sizeof(int), 1, fp); 
	//Write data 
	fwrite(buffer, sizeof(float), size.width * size.height, fp); 
 
	fclose(fp); 
	return true; 
} 
/////////////////////////////////////////////////////////////////////////////////// 
//	Generic Routine to Write CvMat data 
//	The first 8 bytes are two int32 number: width, height and data type(in bytes) 
//	1	----- unsigned char 
//	2	----- short 
//	4	----- int 
//	8   ----- long 
// So "long" data writing is not supported 
//	Then the data write in row order 
///////////////////////////////////////////////////////////////////////////////// 
bool WriteMat(const char* filename, void *data) 
{ 
	CvMat *mat = (CvMat *)data; 
	//Get raw data 
	int step; 
	CvSize size; 
	unsigned char*buffer; 
	cvGetRawData(mat, &buffer, &step, &size); 
	int element_size = sizeof(buffer[0]); 
	//write file 
	FILE *fp; 
	fp = fopen(filename, "wb"); 
	if (fp == 0) 
		return false; 
	//Write width and height 
	fwrite(&size, sizeof(CvSize), 1, fp); 
	//Write data type 
	fwrite(&element_size, sizeof(int), 1, fp); 
	//Write data, in case the rows != 4 * I  
	for (int i = 0; i < size.height; i++, buffer += step) 
	{ 
		fwrite(buffer, element_size, size.width, fp); 
	} 
	fclose(fp); 
	return true; 
} 
/**************************************************************************\ 
* 
*	GetAppPath() 
 
*Purpose: 
* 
*	Get the path of the current application 
* 
*return value: 
*     CString 
* 
* 
\***************************************************************************/ 
CString  GetAppPath() 
{ 
		char exePathAll[80]; 
		GetModuleFileName(NULL, exePathAll, 80); 
		//Just want to use CString class memeber functions 
		CString stemp(exePathAll); 
		return (stemp.Left( stemp.ReverseFind('\\') )); 
} 
/**************************************************************************\ 
* 
*	RemoveExt() 
 
*Purpose: 
* 
*	Get the filename, that is, removing the extension name 
* 
*return value: 
*     CString 
* 
* 
\***************************************************************************/ 
CString RemoveExt(const CString &szName) 
{ 
	return (szName.Left(szName.GetLength() - 4)); 
} 
/**************************************************************************\ 
* 
*	GetExt() 
 
*Purpose: 
* 
*	Get the extension name with dot "." 
* 
*return value: 
*     CString 
* 
* 
\***************************************************************************/ 
CString GetExt(const CString &szName) 
{ 
	return (szName.Right(4)); 
} 
/**************************************************************************\ 
* 
*	GetTime() 
 
*Purpose: 
* 
*	Get the time(second) string 
* 
*return value: 
*     CString 
* 
* 
\***************************************************************************/ 
CString GetTime(void) 
{ 
	SYSTEMTIME time; 
	GetLocalTime(&time); 
	CString datetime; 
	datetime.Format(" H%dM%dS%d", time.wHour, time.wMinute, time.wSecond); 
	return (datetime); 
} 
/**************************************************************************\ 
* 
*	GetDate() 
 
*Purpose: 
* 
*	Get the date string 
* 
*return value: 
*     CString 
* 
* 
\***************************************************************************/ 
CString GetDate(void) 
{ 
	SYSTEMTIME time; 
	GetSystemTime(&time); 
	CString datetime; 
	datetime.Format(" %d-%d-%d",  
		time.wYear, time.wMonth, time.wDay); 
	return (datetime); 
}