home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 309.lha / PBM_PLUS / ppm / libppm4.c < prev    next >
C/C++ Source or Header  |  1980-12-04  |  1KB  |  47 lines

  1. /* libppm4.c - ppm utility library part 4
  2. **
  3. ** Copyright (C) 1989 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include <stdio.h>
  14. #include "ppm.h"
  15.  
  16. pixel
  17. ppm_backgroundpixel( pixels, cols, rows )
  18. pixel **pixels;
  19. int cols, rows;
  20.     {
  21.     pixel bgpixel, ul, ur, ll, lr;
  22.  
  23.     /* Guess a good background value. */
  24.     ul = pixels[0][0];
  25.     ur = pixels[0][cols-1];
  26.     ll = pixels[rows-1][0];
  27.     lr = pixels[rows-1][cols-1];
  28.  
  29.     /* First check for three corners equal. */
  30.     if ( PPM_EQUAL( ul, ur ) && PPM_EQUAL( ur, ll ) )
  31.     bgpixel = ul;
  32.     else if ( PPM_EQUAL( ul, ur ) && PPM_EQUAL( ur, lr ) )
  33.     bgpixel = ul;
  34.     else if ( PPM_EQUAL( ul, ll ) && PPM_EQUAL( ll, lr ) )
  35.     bgpixel = ul;
  36.     else if ( PPM_EQUAL( ur, ll ) && PPM_EQUAL( ll, lr ) )
  37.     bgpixel = ur;
  38.     else
  39.     /* Nope, so just average the four corners. */
  40.     PPM_ASSIGN( bgpixel,
  41.         PPM_GETR(ul) + PPM_GETR(ur) + PPM_GETR(ll) + PPM_GETR(lr) / 4,
  42.         PPM_GETG(ul) + PPM_GETG(ur) + PPM_GETG(ll) + PPM_GETG(lr) / 4,
  43.         PPM_GETB(ul) + PPM_GETB(ur) + PPM_GETB(ll) + PPM_GETB(lr) / 4 );
  44.  
  45.     return bgpixel;
  46.     }
  47.