#include <stdio.h>
#include <stdlib.h>
/* Puzzle I03 -- gray Wedge
|
| The name of the file, the number of rows and number of columns,
| and the gray level are specified on the command line.
|
*/
void writeWedge( FILE *image, int nrows, int ncols)
{
int r, c, grayLevel;
for ( r=0; r<nrows; r++ )
{
grayLevel = (int)(r*255)/(nrows-1) ;
for ( c=0; c<ncols; c++ )
fputc( grayLevel, image );
}
}
int main(int argc, char *argv[])
{
int nrows, ncols ;
FILE *image;
/* check the command line parameters */
if ( argc != 4 )
{
printf("makeGray fileName.pgm nrows ncols\n");
return 0;
}
nrows = atoi( argv[2] );
if ( nrows < 1 )
{
printf("number of rows must be positive\n");
return 0;
}
ncols = atoi( argv[3] );
if ( nrows < 1 )
{
printf("number of columns must be positive\n");
return 0;
}
/* open the image file for writing */
if ( (image = fopen( argv[1], "wb") ) == NULL )
{
printf("file %s could not be created\n", argv[1]);
return 0;
}
/* write out the PGM Header information */
fprintf( image, "P5 ");
fprintf( image, "# Created by writeWedge\n");
fprintf( image, "%d %d %d ", ncols, nrows, 255 );
/* Write out all the pixels */
writeWedge( image, nrows, ncols );
/* close the file */
fclose ( image );
return 1;
}
Comments: The gray level varies linearly from level 0 (at
row zero) to level 255. r has a maximum value of (nrows-1) and
the expression
grayLevel = (255*r)/(nrows-1)
will give only that row the value 255.