home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 334.lha / DkbAnim / ChoosePalette.c < prev    next >
C/C++ Source or Header  |  1990-01-10  |  3KB  |  129 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include <intuition/intuition.h>
  4. #include <libraries/dos.h>
  5.  
  6. #define SCREEN_WIDTH 320L
  7. #define SCREEN_HEIGHT 400L
  8. #define BUFFER_SIZE 8096
  9.  
  10. UWORD ColourTbl[16] = { 0x000, 0x111, 0x222, 0x333, 0x444, 0x555, 0x666,
  11.                        0x777, 0x888, 0x999, 0xaaa, 0xbbb, 0xccc, 0xddd,
  12.                        0xeee, 0xfff };
  13.  
  14. #define extract_red(x) ((x & 0xF00) >> 8)
  15. #define extract_green(x) ((x & 0x0F0) >> 4)
  16. #define extract_blue(x) (x & 0x00F)
  17.  
  18.  
  19. LONG last_y = -1;
  20.  
  21. extern int Close_Threshold;
  22.  
  23. FILE *fp, *palette_file;
  24.  
  25. main (argc, argv) 
  26.  int argc;
  27.  char **argv;
  28.  {
  29.  unsigned int red, green, blue, i;
  30.  unsigned int width, height, x, y, line_number;
  31.  unsigned char red_buffer[SCREEN_WIDTH], green_buffer[SCREEN_WIDTH],
  32.       blue_buffer[SCREEN_WIDTH];
  33.  
  34.  if ((argc != 2) && (argc != 3))
  35.    {
  36.    printf ("\nUsage:  ChoosePalette <filename> <palette_file_name>\n");
  37.    exit(0);
  38.    }
  39.  
  40.  Close_Threshold = 5;
  41.  
  42.  fp = NULL;
  43.  palette_file = NULL;
  44.  
  45.  if ((fp = fopen (argv[1], "r")) == NULL)
  46.    {
  47.    printf ("Cannot read input file\n");
  48.    exit(FALSE);
  49.    }
  50.  
  51.  if ((palette_file = fopen (argv[2], "w")) == NULL)
  52.     {
  53.     printf ("Cannot create palette file\n");
  54.     exit (1);
  55.     }
  56.  
  57.  width = (unsigned int) (getc(fp) & 0xFF);
  58.  width += ((unsigned int) (getc(fp) & 0xFF) * 256);
  59.  height = (unsigned int) (getc(fp) & 0xFF);
  60.  height += ((unsigned int) (getc(fp) & 0xFF) * 256);
  61.  
  62.  if ((width > 320) || (height > 400)) {
  63.     printf ("\nError - picture too large\n");
  64.     fclose(fp);
  65.     fclose(palette_file);
  66.     exit (0);
  67.     }
  68.  
  69.  printf ("Processing...\n");
  70.  
  71.  start_recording_colours();
  72.  
  73.  for (y = 0 ; y < height ; y++) {
  74.    /* Skip over the line number.  It's not important at this point */
  75.    getc(fp);
  76.    getc(fp);
  77.  
  78.    for (x = 0 ; x < width ; x++)
  79.      red_buffer[x] = getc(fp);
  80.  
  81.    for (x = 0 ; x < width ; x++)
  82.      green_buffer[x] = getc(fp);
  83.  
  84.    for (x = 0 ; x < width ; x++)
  85.      blue_buffer[x] = getc(fp);
  86.  
  87.    for (x = 0 ; x < width ; x++)
  88.      {
  89.      red = red_buffer[x];
  90.      green = green_buffer[x];
  91.      blue = blue_buffer[x];
  92.      process (x, height - y, red, green, blue);
  93.      }
  94.    }
  95.  choose_palette();
  96.  for (i = 0 ; i < 16 ; i++) {
  97.     fprintf (palette_file, "%d %d %d\n",
  98.              extract_red(ColourTbl[i]),
  99.              extract_green(ColourTbl[i]),
  100.              extract_blue(ColourTbl[i]));
  101.     }
  102.  fclose(palette_file);
  103.  fclose (fp);
  104.  }
  105.  
  106.  
  107. process (x, y, new_red, new_green, new_blue)
  108.   LONG x, y, new_red, new_green, new_blue;
  109.   {
  110.   LONG newline;
  111.  
  112.   new_red &= 0xFF;
  113.   new_green &= 0xFF;
  114.   new_blue &= 0xFF;
  115.  
  116.   new_red /= 16;
  117.   new_green /= 16;
  118.   new_blue /= 16;
  119.  
  120.   newline = 0;
  121.   if (last_y != y) {
  122.     newline = 1;
  123.     last_y = y;
  124.     reset_colours();
  125.     }
  126.  
  127.   record_colours (new_red, new_green, new_blue);
  128.   }
  129.