home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff397.lzh / DKBTrace / DKBSource.LZH / Dump2RGB.c < prev    next >
C/C++ Source or Header  |  1990-08-26  |  6KB  |  242 lines

  1. #include "frame.h"
  2.  
  3. /* #define IBM TRUE */
  4.  
  5. #define Amiga TRUE
  6.  
  7. IMAGE Raw_Image;
  8.  
  9. FILE *fp, *palette_file, *output_palette_file;
  10. FILE *fred, *fgrn, *fblu;
  11. char input_filename[100], master_filename[100], output_filename[100];
  12. int image_width, image_height;
  13.  
  14. #ifdef IBM
  15. #define REDNAME "%s.r8"
  16. #define GRNNAME "%s.g8"
  17. #define BLUNAME "%s.b8"
  18. #define DEFAULT_WIDTH  320
  19. #define DEFAULT_HEIGHT 200
  20. #endif
  21.  
  22. #ifdef Amiga
  23. #define REDNAME "%s.red"
  24. #define GRNNAME "%s.grn"
  25. #define BLUNAME "%s.blu"
  26. #define DEFAULT_WIDTH  320
  27. #define DEFAULT_HEIGHT 400
  28. #endif
  29.  
  30. int read_raw_byte PARAMS((FILE *f));
  31. int read_raw_word PARAMS((FILE *f));
  32. void read_raw_image PARAMS((IMAGE *Image));
  33. void get_parameters PARAMS((int argc, char **argv));
  34. void OpenRGB PARAMS((void));
  35. void SaveRGB PARAMS((int red, int grn, int blu));
  36.  
  37. void main (argc, argv) 
  38.    int argc;
  39.    char **argv;
  40.    {
  41.    unsigned int x, y, index;
  42.  
  43.    if (argc < 2)
  44.      {
  45.      printf ("\nUsage:  DumpToRGB [-wxxx -hxxx] <filename>\n   .dis extension is assumed for <filename>\n   default image size: %d x %d", DEFAULT_WIDTH, DEFAULT_HEIGHT);
  46.      exit(0);
  47.      }
  48.  
  49.    fp = NULL;
  50.  
  51.    get_parameters(argc, argv);
  52.  
  53.    printf ("Reading raw file\n");
  54.    read_raw_image (&Raw_Image);
  55.  
  56.    printf ("Converting...\n");
  57.  
  58.    OpenRGB();
  59.    for (y = 0 ; y < Raw_Image.height ; y++) {
  60.       for (x = 0 ; x < Raw_Image.width ; x++) {
  61.          index = y*Raw_Image.width + x;
  62.          SaveRGB((int)Raw_Image.red[index],(int)Raw_Image.green[index],(int)Raw_Image.blue[index]);
  63.          }
  64.       for (; x < image_width ; x++)
  65.     SaveRGB(0, 0, 0);
  66.       }
  67.    for (; y < image_height ; y++)
  68.       for (; x < image_width; x++)
  69.     SaveRGB(0, 0, 0);
  70.    fclose(fred);
  71.    fclose(fgrn);
  72.    fclose(fblu);
  73.    }
  74.  
  75. void get_parameters (argc, argv)
  76.    int argc;
  77.    char **argv;
  78.    {
  79.    int i, filename_number;
  80.  
  81.    image_height = DEFAULT_HEIGHT;
  82.    image_width = DEFAULT_WIDTH;
  83.  
  84.    filename_number = 0;
  85.    for (i = 1 ; i < argc ; i++) {
  86.  
  87.       if (argv[i][0] == '-')
  88.      switch (argv[i][1]) {
  89.         case 'w': sscanf(&argv[i][2], "%d", &image_height);
  90.               break;
  91.         case 'h': sscanf(&argv[i][2], "%d", &image_height);
  92.               break;
  93.         default : printf("Unknown option %s - proceeding...\n");
  94.         }
  95.       else
  96.          switch (filename_number) {
  97.             case 0: strcpy (master_filename, argv[i]);
  98.             sprintf (input_filename, "%s.dis", master_filename);
  99.             filename_number++;
  100.                     break;
  101.  
  102.             default: printf ("Too many filenames in commandline\n");
  103.                      exit(1);
  104.             }
  105.       }
  106.    }
  107.  
  108.  
  109. int read_raw_byte(f)
  110.    FILE *f;
  111.    {
  112.    int c;
  113.    if ((c = getc(f)) == EOF)
  114.       return (-1);
  115.    return (c);
  116.    }
  117.  
  118. int read_raw_word(f)
  119.    FILE *f;
  120.    {
  121.    int byte1, byte2;
  122.  
  123.    byte1 = read_raw_byte(f);
  124.    if (byte1 == -1)
  125.       return(-1);
  126.  
  127.    byte2 = read_raw_byte(f);
  128.    if (byte2 == -1)
  129.       return(-1);
  130.  
  131.    return (byte1 + byte2*256);
  132.    }
  133.  
  134. void OpenRGB()
  135. {
  136.    char nmbuff[200];
  137.  
  138.    sprintf( nmbuff, REDNAME, master_filename );
  139.    if ((fred = fopen(nmbuff, "wb")) == NULL) {
  140.       printf ("Cannot open red output file for %s\n", master_filename);
  141.       exit(1);
  142.       }
  143.  
  144.    sprintf( nmbuff, GRNNAME, master_filename );
  145.    if ((fgrn = fopen(nmbuff, "wb")) == NULL) {
  146.       printf ("Cannot open green output file for %s\n", master_filename);
  147.       exit(1);
  148.       }
  149.  
  150.    sprintf( nmbuff, BLUNAME, master_filename );
  151.    if ((fblu = fopen(nmbuff, "wb")) == NULL) {
  152.       printf ("Cannot open blue output file for %s\n", master_filename);
  153.       exit(1);
  154.       }
  155. }
  156.  
  157. void SaveRGB(red, grn, blu)
  158. int red, grn, blu;
  159. {
  160.    fputc( red, fred );
  161.    fputc( grn, fgrn );
  162.    fputc( blu, fblu );
  163. }
  164.  
  165. void read_raw_image(Image)
  166.    IMAGE *Image;
  167.    {
  168.    FILE *f;
  169.    unsigned int i, index, pixels;
  170.    int byte, row;
  171.  
  172.    if ((f = fopen(input_filename, "rb")) == NULL) {
  173.       printf ("Cannot open raw file %s\n", input_filename);
  174.       exit(1);
  175.       }
  176.  
  177.    Image->width = read_raw_word(f);
  178.    if (Image->width == -1) {
  179.       printf ("Cannot read size in dump file\n");
  180.       exit(1);
  181.       }
  182.  
  183.    Image->height = read_raw_word(f);
  184.    if (Image->height == -1) {
  185.       printf ("Cannot read size in dump file: %s\n", input_filename);
  186.       exit(1);
  187.       }
  188.  
  189.    pixels = Image->width * Image->height;
  190.  
  191.    if (((Image->red = (unsigned char *) malloc(pixels))==NULL) ||
  192.        ((Image->green = (unsigned char *) malloc(pixels))==NULL) ||
  193.        ((Image->blue = (unsigned char *) malloc(pixels))==NULL)) {
  194.       printf ("Cannot allocate memory for picture: %s\n", input_filename);
  195.       exit(1);
  196.       }
  197.  
  198.    for (i = 0 ; i < pixels ; i++) {
  199.       Image->red[i] = 0;
  200.       Image->green[i] = 0;
  201.       Image->blue[i] = 0;
  202.       }
  203.  
  204.    row = read_raw_word(f);
  205.    while (row != -1) {
  206.       for (i = 0 ; i < Image->width ; i++) {
  207.          index = row*Image->width + i;
  208.  
  209.          byte = read_raw_byte(f);
  210.          if (byte == -1) {
  211.             printf ("Unexpected end of file in raw image: %s\n", input_filename);
  212.             exit(1);
  213.             }
  214.          Image->red[index] = byte;
  215.          }
  216.  
  217.       for (i = 0 ; i < Image->width ; i++) {
  218.          index = row*Image->width + i;
  219.  
  220.          byte = read_raw_byte(f);
  221.          if (byte == -1) {
  222.             printf ("Unexpected end of file in raw image: %s\n", input_filename);
  223.             exit(1);
  224.             }
  225.          Image->green[index] = byte;
  226.          }
  227.  
  228.       for (i = 0 ; i < Image->width ; i++) {
  229.          index = row*Image->width + i;
  230.  
  231.          byte = read_raw_byte(f);
  232.          if (byte == -1) {
  233.             printf ("Unexpected end of file in raw image: %s\n", input_filename);
  234.             exit(1);
  235.             }
  236.          Image->blue[index] = byte;
  237.          }
  238.       row = read_raw_word(f);
  239.       }
  240.    fclose (f);
  241.    }
  242.