I07 Answer


 
makeInverseCenter( FILE *image, int nrows, int ncols )
{
  int r, c, level ; /* row and col of current pixel */
  int rc, cc ;      /* row and col of center of image */
  int rd, cd ;      /* row and col difference from center */
  double length, dist ;

  rc = nrows/2;
  cc = ncols/2;

  /* determine the half diagonal length */
  length = sqrt( (double)(nrows*nrows + ncols*ncols) ) / 2.0 ;

  /* write out the pixel data */
  for ( r=0; r<nrows; r++ )
  {
    rd = r - rc;

    for ( c=0; c<ncols; c++ )
    {
      cd   = c - cc;
      dist = sqrt( (double)(rd*rd + cd*cd) );
      level = (int)(255*(1.0-dist/length));
      fputc( level, image );
    }
  }
}

Comments: Calculating the gray level involves more tricks than in the previous program.

back