www.pudn.com > mk_jpeg.rar > mk_jpeg.c


#include "stdio.h" 
#include "ctype.h" 
  
#define BYTE    unsigned char       // btVarName 
#define CHAR    signed char         // cVarName 
#define USHORT  unsigned short      // usVarName 
#define SHORT   unsigned short      // sVarName 
#define WORD    unsigned int        // wVarName 
#define INT     signed int          // iVarName 
#define DWORD   unsigned long       // dwVarName 
#define LONG    signed long         // lVarName 
#define BOOL    unsigned int        // bVarName 
#define FRACT   _fract              // frVarName 
#define LFRACT  long _fract         // lfrVarName 
#define CIRC    _circ               // cpVarName (see below) 
#define FLOAT   float               // fVarName 
#define DBL     double              // dVarName 
#define ENUM    enum                // eVarName 
#define CMX     _complex            // cmxVarName 
 
DWORD copy_a_file(FILE *fp2,BYTE *buf); 
void write_h_head(FILE * fp3,DWORD offset,DWORD cur_length,BYTE * buf); 
int test=0; 
 
main(int argc,char *argv[]) 
{ 
    unsigned char c; 
    DWORD fp2_length,cur_length; 
    int i,j,k,lines; 
    FILE *fp1,*fp2,*fp3; 
    BYTE *rd_file; 
    BYTE  buf1[128]; 
 
     if(argc<3) { 
         printf("Usage: cmd 1MB.uis 1MB_jpeg.cfg\n"); 
         exit(1); 
     } 
 
 /* 
 rd_file = argv[1]; 
if((fp1=fopen(rd_file,"rb"))==NULL){        //打开f.txt全file.jpg文件名的文件 
		printf("出错:cannot open%s\n",rd_file); 
		scanf("%c",&c); 
		exit(1); 
	} 
*/ 
if((fp2=fopen("1MB_jpeg.uis","wb"))==NULL){ 
 		printf("cannot write File 1MB_jpeg.uis \n"); 
		scanf("%c",&c); 
		exit(1); 
	} 
 
fp2_length = copy_a_file(fp2,argv[1]); 
printf("(fp2_length=%d=0x%x\n",fp2_length,fp2_length); 
if(fp2_length==0)  exit(1); 
 
if((fp3=fopen("1MB_jpeg.h","wb"))==NULL){ 
 		printf("cannot write File 1MB_jpeg.h \n"); 
		scanf("%c",&c); 
		exit(1); 
	} 
/* 
 fp2_length = 0; 
 while (!feof(fp1)) {       //把1MB.uis的内容读到 1MB_jpeg.uis中,准备在后面加jpeg图片资源 
       c = getc(fp1); 
       fprintf(fp2,"%c",c);  
       fp2_length++; 
 } 
 fclose(fp1);       //原始1MB.uis到这里完成使命 
 */ 
 
 //不能这样写 fp2_length = fseek(fp2,-1,SEEK_END); 
 //printf("fp2_length=%d\n",fp2_length);   //w++多写了个0XFF 
 //scanf("%c",&c); 
 //exit(0); 
 
//lines = atoi(argv[1]); 
 rd_file = argv[argc-1]; 
 if((fp1=fopen(rd_file,"rb"))==NULL){        //打开1MB_jpeg.cfg全file.jpg文件名的文件 
		printf("出错:cannot open%s\n",rd_file); 
		scanf("%c",&c); 
		exit(1); 
	} 
 
lines=0;         //得到文本行数 
while (!feof(fp1))  { 
     c=getc(fp1); 
     if(c==0x0D) lines++; 
 } 
 fseek(fp1,-1,SEEK_END); 
if( getc(fp1)!=0x0A)  { 
   printf("最后一行正确结尾不正确:lines=%d\n",lines); 
   exit(1); 
} 
fseek(fp1,0,SEEK_SET); 
//printf("行数:lines=%d\n",lines); 
//exit(0); 
 
//while (!feof(fp1)) { 
 for(j=0;j>(28-4*i))&0x0f; 
			DispBuf[i] = (n<10) ? (n+0x30) : (n+0x37); 
	  } 
			 
		DispBuf[8] = 0;	 
 
		return;		//w++ 返回坐标,以便于连续写 
} 
void write_h_head(FILE * fp3,DWORD offset,DWORD cur_length,BYTE * buf) 
{ 
     BYTE  c; 
     int   i=0; 
     BYTE  *jpegDef1 = "#define    NFA_JPG_"; 
     BYTE  *jpegDef2 = "            ((unsigned long)0x"; 
   
     BYTE  *jpegLen1 = "#define    JPG_"; 
     BYTE  *jpegLen2 = "_SIZE            ((unsigned long)0x"; 
 
     BYTE  *pbuf = buf; 
     BYTE  nbuf[9]; 
 
	while(*pbuf) { 
		if((*pbuf>0x60) && (*pbuf<0x7b)) *pbuf -=0x20;  //小写转成大写 
		if(*pbuf==0x2e) { *pbuf=0; break; }     //'.'去掉文件名后缀 
		*pbuf++; 
        //i++; if(i>100) break; 
	} 
 
	pbuf = jpegDef1;    //宏定义开头 
	while(*pbuf) { 
		 c = *pbuf++; 
		 fprintf(fp3,"%c",c); 
        //printf("出错1c=%x\n",c); 
    //scanf("%c",&c); 
	} 
 
	pbuf = buf;         //文件名作为重要标记 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
         //printf("出错2c=%x\n",c); 
    //scanf("%c",&c); 
	} 
 
	pbuf = jpegDef2;    //宏定义地址开始 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
         //printf("出错3c=%x\n",c); 
    //scanf("%c",&c); 
	} 
 
	NumToChar(offset,nbuf); 
 printf("(offset=%d=%x\n",offset,offset); 
	pbuf = nbuf;    //宏定义地址 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
         //printf("出错4c=%x\n",c); 
    //scanf("%c",&c); 
	} 
 
	fprintf(fp3,"%c",0x29);     // 补")" 
	fprintf(fp3,"%c",0x0D); 
	fprintf(fp3,"%c",0x0A); 
 
 //----------------写宏定义Jpeg文件长度---------------- 
    pbuf = jpegLen1;    //宏定义开头 
	while(*pbuf) { 
		 c = *pbuf++; 
		 fprintf(fp3,"%c",c); 
	} 
 
 	pbuf = buf;         //文件名作为重要标记 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
 	} 
 
	pbuf = jpegLen2;    //宏定义地址开始 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
 	} 
 
	NumToChar(cur_length,nbuf); 
 printf("(cur_length=%d=%x\n",cur_length,cur_length); 
	pbuf = nbuf;    //宏定义地址 
	while(*pbuf) { 
		c = *pbuf++; 
		fprintf(fp3,"%c",c); 
	} 
 
	fprintf(fp3,"%c",0x29);     // 补")" 
	fprintf(fp3,"%c",0x0D); 
	fprintf(fp3,"%c",0x0A); 
 
} 
 
DWORD copy_a_file(FILE *fp2,BYTE *buf) 
{ 
	unsigned char c; 
	FILE  *fp1; 
	DWORD fp1_length; 
 
	if((fp1=fopen(buf,"rb"))==NULL){        //打开f.txt全file.jpg文件名的文件 
		printf("出错:cannot open%s\n",buf); 
		return(0); 
	} 
 
	fp1_length = 0; 
	while (1) { // (!feof(fp1)) {       //把1个文件的内容拷贝到另一个文件中 
	   c = getc(fp1); 
       if(feof(fp1)) break; 
	   fprintf(fp2,"%c",c);  
	   fp1_length++; 
	} 
	 
	//fp1_length--;      //经查,比实际长度多了1 
    //fseek(fp2,-1,SEEK_END); 
	fclose(fp1);       //一个文件已经写完 
 
	/*if(fp1_length%2) {      //保证再写的时候从双数开始,加一个冗余 
	    c = 0xff; 
	   fprintf(fp2,"%c",c);  
	   fp1_length++; 
	}*/ 
	return(fp1_length); 
}