Sign-up....

哪位高人可以帮我看看这个啊

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct tagRleCode{

int attrib;

int lenth;

}RLECODE;

int GenCode(char* OutDirectory,int row,int col,int* data);

int main(int argc,char** argv)

{

char* InputFileName;

char* FileDirectory;

FILE* fpInFile;

int nRows;

int nCols;

char* chTemp;

int* pData;

int i,j;

int nCodes;

InputFileName = (char*)malloc(256*sizeof(char));

if(!InputFileName) return 0;

InputFileName[0]='\0';

fpInFile=NULL;

if(argc<2)

{

printf("Please input the file name\n");

scanf("%s",InputFileName);

}

else

strcpy(InputFileName,argv[1]);

// printf("%s\n",InputFileName);

FileDirectory = (char*)malloc(256*sizeof(char));

if(!FileDirectory)

{

free(InputFileName);

return 0;

}

char* substr = strrchr(InputFileName,'\\');

i = (int)strlen(InputFileName);

j = (int)strlen(substr);

i -= (j-1);

for(j=0;j<i;j++)

FileDirectory[j]=InputFileName[j];

FileDirectory[j]='\0';

fpInFile = fopen(InputFileName,"r");

if(!fpInFile)

{

printf("Can't open file for reading\n");

free(InputFileName);

return 0;

}

chTemp = (char*)malloc(20*sizeof(char));

if(!chTemp)

{

printf("Can't allocate memory\n");

free(InputFileName);

fclose(fpInFile);

return 0;

}

chTemp[0]='\0';

nCodes = 0;

fscanf(fpInFile,"%s",chTemp);

if(0==strcmp(chTemp,"Raster_Data"))

{

fscanf(fpInFile,"%d%d",&nRows,&nCols);

// printf("%d,%d\n",nRows,nCols);

pData = (int*)malloc(nRows*nCols*sizeof(int));

if(pData)

{

for(i=0;i<nRows;i++)

for(j=0;j<nCols;j++)

{

fscanf(fpInFile,"%d",&pData[i*nRows+j]);

}

nCodes = GenCode(FileDirectory,nRows,nCols,pData);

}

}

if(nCodes>0)

{

i = nCodes*sizeof(RLECODE);

j = nRows*nCols*sizeof(int);

printf("The compression ratio is %.4f\n",(float)i/(float)j);

}

free(InputFileName);

free(FileDirectory);

free(chTemp);

fclose(fpInFile);

return 1;

}

//生成游程长度编码

//OutDirectory:输出编码文件的路径;

int GenCode(char* OutDirectory,int row,int col,int* data)

{

FILE* fpOutFile;

char* OutFileName;

int i,j;

int n;

RLECODE code;

int nCode;

nCode = 0;

OutFileName = strcat(OutDirectory,"RLE.text");

fpOutFile=fopen(OutFileName,"w");

if(fpOutFile)

{

for (i=0;i<row;i++)

{

n = 1;

for(j=0;j<col-1;j++)

{

if(data[i*row+j]==data[i*row+j+1])

n += 1;

else

{

code.lenth = n;

code.attrib = data[i*row+j];

n=1;

fprintf(fpOutFile,"(%d,%d) ",code.attrib ,code.lenth );

nCode += 1;

}

}

code.lenth = n;

code.attrib = data[i*row+j];

fprintf(fpOutFile,"(%d,%d) ",code.attrib ,code.lenth );

nCode += 1;

fprintf(fpOutFile,"\n");

}

fclose(fpOutFile);

}

return nCode;

}

[2846 byte] By [菜菜鸟] at [2007-8-15 11:15:00]

C/C++

All Classified