home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_10_11 / 1011116a < prev    next >
Text File  |  1992-09-02  |  4KB  |  138 lines

  1.        /***********************************************
  2.        *
  3.        *       file d:\cips\half.c
  4.        *
  5.        *       Functions: This file contains
  6.        *          main
  7.        *
  8.        *       Purpose:
  9.        *          This file contains the main calling
  10.        *          routine for a program which shrinks
  11.        *          an image in half (e.g. 600x600 to a
  12.        *          300x300).  The output image will
  13.        *          always be an even multiple of
  14.        *          ROWS and COLS.
  15.        *
  16.        *       External Calls:
  17.        *          gin.c - get_image_name
  18.        *          numcvrt.c - get_integer
  19.        *                      int_convert
  20.        *          tiff.c - read_tiff_header
  21.        *          scale.c - shrink_image_array
  22.        *
  23.        *       Modifications:
  24.        *          25 April 1992 - created
  25.        *
  26.        *************************************************/
  27.  
  28. #include "d:\cips\cips.h"
  29.  
  30. short the_image[ROWS][COLS];
  31. short out_image[ROWS][COLS];
  32.  
  33. main(argc, argv)
  34.    int argc;
  35.    char *argv[];
  36. {
  37.  
  38.    char     method[80], name[80], name2[80];
  39.    int      count, i, j, length, width,
  40.             il, ie, ll, le;
  41.    struct   tiff_header_struct image_header;
  42.  
  43.    _setvideomode(_TEXTC80); /* MSC 6.0 statements */
  44.    _setbkcolor(1);
  45.    _settextcolor(7);
  46.    _clearscreen(_GCLEARSCREEN);
  47.  
  48.        /***********************************************
  49.        *
  50.        *       Interpret the command line parameters.
  51.        *
  52.        ************************************************/
  53.  
  54.    if(argc < 4 || argc > 4){
  55.     printf(
  56.      "\n"
  57.      "\n usage: half in-file out-file method"
  58.      "\n        method can be Average, Median, Corner"
  59.      "\n");
  60.     exit(0);
  61.    }
  62.  
  63.    strcpy(name,   argv[1]);
  64.    strcpy(name2,  argv[2]);
  65.    strcpy(method, argv[3]);
  66.  
  67.    if(method[0] != 'A' &&
  68.       method[0] != 'a' &&
  69.       method[0] != 'M' &&
  70.       method[0] != 'm' &&
  71.       method[0] != 'C' &&
  72.       method[0] != 'c'){
  73.       printf("\nERROR: Did not enter a valid method"
  74.              "\n       The valid methods are:"
  75.              "\n       Average, Median, Corner");
  76.       printf(
  77.        "\n"
  78.        "\n usage: half in-file out-file method"
  79.        "\n        method can be Average, Median, Corner"
  80.        "\n");
  81.       exit(-2);
  82.    }
  83.  
  84.    il = 1;
  85.    ie = 1;
  86.    ll = ROWS+1;
  87.    le = COLS+1;
  88.  
  89.        /***********************************************
  90.        *
  91.        *       Read the input image header and setup
  92.        *       the looping counters.
  93.        *       Force the length and width of the 
  94.        *       input image to be an even number.
  95.        *       Halve the looping counters.
  96.        *       Create the output image.
  97.        *
  98.        ************************************************/
  99.  
  100.    read_tiff_header(name, &image_header);
  101.  
  102.    length = (90 + image_header.image_length)/ROWS;
  103.    width  = (90 + image_header.image_width)/COLS;
  104.    if( (length % 2) != 0) length++;
  105.    if( (width  % 2) != 0) width++;
  106.    length = length/2;
  107.    width  = width/2;
  108.    count  = 1;
  109.  
  110.    image_header.image_length = length*ROWS;
  111.    image_header.image_width  = width*COLS;
  112.    create_allocate_tiff_file(name2, &image_header,
  113.                              out_image);
  114.  
  115.        /***********************************************
  116.        *
  117.        *   Read and shrink each 200x200 area of the
  118.        *   input image and write them to the output
  119.        *   image.
  120.        *
  121.        ************************************************/
  122.  
  123.    count = 1;
  124.    for(i=0; i<length; i++){
  125.       for(j=0; j<width; j++){
  126.  
  127.          printf("\nrunning %d of %d", count++, length*width);
  128.          shrink_image_array(name, name2, 
  129.                             the_image, out_image,
  130.                             il+i*ROWS*2, ie+j*COLS*2,
  131.                             ll+i*ROWS*2, le+j*COLS*2,
  132.                             il+i*ROWS, ie+j*COLS,
  133.                             ll+i*ROWS, le+j*COLS,
  134.                              2, method);
  135.       }  /* ends loop over j */
  136.    }  /* ends loop over i */
  137. }  /* ends main  */
  138.