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); }