void image::write(const char *fname, Fw8u *imageYCbCr) { Fw8u *finalImage; FwiSize roi; Fw8u *temporary[3]; roi.width = imageWidth; roi.height = imageHeight; temporary[0] = imageYCbCr; temporary[1] = imageYCbCr + (imageWidth*imageHeight); temporary[2] = imageYCbCr + 2 * (imageWidth*imageHeight); finalImage = (Fw8u *)malloc(sizeof(Fw8u)*imageWidth*imageHeight*noOfComponents); fwiYCbCrToBGR_JPEG_8u_P3C3R(temporary,imageWidth, finalImage,imageWidth*noOfComponents,roi ); writeBmpFile(fname,finalImage,imageWidth*imageHeight*noOfComponents,imageWidth,imageHeight); free (finalImage); }
int main(int argc, char *argv[]){ FILE *readP; FILE *writeP; char readFilename[FILENAME_CHARMAX] = "input.bdf"; char writeFilename[FILENAME_CHARMAX] = "output.bmp"; int i, j, tmp, n, dst, c; char *sP; unsigned char *bitmapP = NULL; /* address of bitmapAREA */ int spacing = 2; /* breadth of spacing (default 2) */ int flag; int colchar = 32; /* number of columns(horizontal) (default 32) */ char paramP[PARAM_MAX][LINE_CHARMAX]; /* parameter strings */ int iflag = OFF; struct stat fileinfo; /* * deal with arguments */ if(argc < 2){ /* printf("error: not enough arguments\n"); */ printhelp(); } /* formatting arguments */ sP = calloc(LINE_CHARMAX, sizeof(char)); if(sP == NULL){ printf("error\n"); exit(1); } for(i=1,dst=0,n=0; i<argc; i++){ if(argv[i][0] == '-'){ /* command-line options */ for(j=1; j<(int)strlen(argv[i]); j++){ if(argv[i][j]=='w' || argv[i][j]=='i' || argv[i][j]=='h' || argv[i][j]=='v') { *(sP+dst) = '-'; dst++; *(sP+dst) = argv[i][j]; dst++; *(sP+dst) = '\0'; strcpy(paramP[n], sP); dst=0; n++; memset(sP,0,LINE_CHARMAX); if(n >= PARAM_MAX){ printf("error: too many arguments\n"); exit(EXIT_FAILURE); } }else if( (argv[i][j]=='s') || (argv[i][j]=='c')) { *(sP+dst) = '-'; dst++; *(sP+dst) = argv[i][j]; dst++; }else if( isdigit(argv[i][j]) == 0 ){ /* not [0-9] */ printf("error: invalid option -- '%c'\n", argv[i][j]); exit(EXIT_FAILURE); }else if( argv[i][j+1] == '\0' ){ *(sP+dst) = argv[i][j]; dst++; *(sP+dst) = '\0'; strcpy(paramP[n], sP); dst=0; n++; if(n >= PARAM_MAX){ printf("error: too many arguments\n"); exit(EXIT_FAILURE); } }else{ *(sP+dst) = argv[i][j]; dst++; } } }else{ /* not command-line options */ for(j=0; j<(int)strlen(argv[i]); j++){ *(sP+dst) = argv[i][j]; dst++; } *(sP+dst) = '\0'; strcpy(paramP[n], sP); dst=0; n++; memset(sP,0,LINE_CHARMAX); if(n >= PARAM_MAX){ printf("error: too many arguments\n"); exit(EXIT_FAILURE); } } } free(sP); /* interpretting arguments */ for(i=0, flag=0; i<n; i++){ switch( paramP[i][0] ){ case '-': if(paramP[i][1] == 's') spacing = atoi(¶mP[i][2]); else if(paramP[i][1] == 'c') colchar = atoi(¶mP[i][2]); else if(paramP[i][1] == 'w') dwflag = ON; else if(paramP[i][1] == 'i') iflag = ON; else if( (paramP[i][1]=='v') || (paramP[i][1]=='h')) printhelp(); break; default: if(flag == 0){ strcpy(readFilename, paramP[i]); flag ++; }else{ strcpy(writeFilename, paramP[i]); if(strcmp(readFilename, writeFilename) == 0){ printf("error: input-filename and output-filename are same\n"); exit(EXIT_FAILURE); } flag ++; } break; } } if(flag < 2){ printf("error: not enough arguments\n"); printf("Usage: bdf2bmp [-option] input-bdf-file output-bmp-file\n"); exit(EXIT_FAILURE); } /* colchar is limited from 1 to 1024 */ if(colchar < 1) colchar = 1; else if(colchar > 1024) colchar = 1024; /* spacing is limited from 0 to 32 */ if(spacing < 0) spacing = 0; else if(spacing > 32) spacing = 32; /* checkEndian */ checkEndian(); /* * prepare to read&write files */ readP = fopen(readFilename, "r"); if(readP == NULL){ printf("bdf2bmp: '%s' does not exist\n", readFilename); exit(EXIT_FAILURE); } /* Does writeFilename already exist? */ if((iflag==ON) && (stat(writeFilename, &fileinfo)==0)){ fprintf(stderr, "bdf2bmp: overwrite '%s'? ", writeFilename); c = fgetc(stdin); if((c=='y') || (c=='Y')) ; /* go next */ else /* printf("not overwrite\n"); */ exit(EXIT_FAILURE); } writeP=fopen(writeFilename, "wb"); if(writeP == NULL){ printf("error: cannot write '%s'\n", writeFilename); exit(EXIT_FAILURE); } /* read bdf-font-file */ bitmapP = readBdfFile(bitmapP, readP); fclose(readP); /* write bmp-image-file */ writeBmpFile(bitmapP, spacing, colchar, writeP); tmp = fclose(writeP); if(tmp == EOF){ printf("error: cannot write '%s'\n", writeFilename); free(bitmapP); exit(EXIT_FAILURE); } free(bitmapP); return EXIT_SUCCESS; }