typedef struct tag_SPARSE_MATRIX_STRUCT { int eleNum; int rowNum; int colNum; double * mData; int * columns; int * rowIndex; } SparseMatrix; typedef struct tag_SPATIALLY_VARIANT_SPARSE_KERNEL_STRUCT { int imWidth; int imHeight; int kw; int kh; SparseMatrix sparseKernelMatrix; } SpvKernelSparse; int CSpvKernelManager::SaveSklKernelFile( char * filename , SpvKernelSparse * spvKernel ) { if ( spvKernel == NULL ) { return -2; } char svName[MAX_FILE_NAME_LENGTH]; int filenameLength = (int)(strlen( filename )); if ( strncmp( &(filename[filenameLength-4]) , ".skl" , 4 ) == 0 ) { sprintf( svName , "%s" , filename ); } else { sprintf( svName , "%s.skl" , filename ); } FILE * saveGKFile = fopen( svName , "wb" ); if ( saveGKFile == NULL ) { return -1; } fwrite( &(spvKernel->imWidth) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->imHeight) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->kw) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->kh) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->sparseKernelMatrix.colNum) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->sparseKernelMatrix.eleNum) , sizeof(int) , 1 , saveGKFile ); fwrite( &(spvKernel->sparseKernelMatrix.rowNum) , sizeof(int) , 1 , saveGKFile ); fwrite( spvKernel->sparseKernelMatrix.columns , sizeof(int) , spvKernel->sparseKernelMatrix.eleNum , saveGKFile ); fwrite( spvKernel->sparseKernelMatrix.mData , sizeof(double) , spvKernel->sparseKernelMatrix.eleNum , saveGKFile ); fwrite( spvKernel->sparseKernelMatrix.rowIndex , sizeof(int) , spvKernel->sparseKernelMatrix.rowNum+1 , saveGKFile ); fflush( saveGKFile ); fclose( saveGKFile ); return 0; } int CSpvKernelManager::LoadSklKernelFile( char * filename , SpvKernelSparse * spvKernel ) { if ( spvKernel == NULL ) { return -2; } FILE * saveGKFile = fopen( filename , "rb" ); if ( saveGKFile == NULL ) { return -1; } fread( &(spvKernel->imWidth) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->imHeight) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->kw) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->kh) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->sparseKernelMatrix.colNum) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->sparseKernelMatrix.eleNum) , sizeof(int) , 1 , saveGKFile ); fread( &(spvKernel->sparseKernelMatrix.rowNum) , sizeof(int) , 1 , saveGKFile ); SAFE_FREE( spvKernel->sparseKernelMatrix.columns ); spvKernel->sparseKernelMatrix.columns = (int*)malloc( sizeof(int)*(spvKernel->sparseKernelMatrix.eleNum) ); fread( spvKernel->sparseKernelMatrix.columns , sizeof(int) , spvKernel->sparseKernelMatrix.eleNum , saveGKFile ); SAFE_FREE( spvKernel->sparseKernelMatrix.mData ); spvKernel->sparseKernelMatrix.mData = (double*)malloc( sizeof(double)*(spvKernel->sparseKernelMatrix.eleNum) ); fread( spvKernel->sparseKernelMatrix.mData , sizeof(double) , spvKernel->sparseKernelMatrix.eleNum , saveGKFile ); SAFE_FREE( spvKernel->sparseKernelMatrix.rowIndex ); spvKernel->sparseKernelMatrix.rowIndex = (int*)malloc( sizeof(int)*(spvKernel->sparseKernelMatrix.eleNum+1) ); fread( spvKernel->sparseKernelMatrix.rowIndex , sizeof(int) , spvKernel->sparseKernelMatrix.rowNum+1 , saveGKFile ); fclose( saveGKFile ); return 0; }