I88 Answer ― Single Pixel


#include <stdlib.h>
#include <stdio.h>
#include "../basicColorImage.c"

int getColor( int arg, char *argv[] )
{
  int value;
  value = atoi( argv[arg] );
  if ( value < 0 || value > 255 )
  {
    printf("color level %s  must be between 0 and 255\n", argv[arg]);
    exit( EXIT_FAILURE );
  }
  return value;
}

int main(int argc, char *argv[])
{
  int r, nrows, c, ncols, red, grn, blu;
  colorImage img ;
  pixel pix = {0,0,0};

  /* check the command line parameters */
  if ( argc != 7 )
  {
    printf("singlePixel fileName.ppm nrows ncols red green blue\n");
    return 0;
  }

  nrows = atoi( argv[2] );
  ncols = atoi( argv[3] );

  /* create the image structure */
  if ( newColorImage( &img, nrows, ncols ) == NULL )
  {
    printf(">>error<< newColorImage can't allocate memory\n");
    return;
  }

  /* fill in the pixel data */
  for ( r=0; r<nrows; r++ )
    for ( c=0; c<ncols; c++ )
      setColorPixel( img, r, c, pix );

  /* Get colors from the command line */
  pix.red = getColor( 4, argv );
  pix.grn = getColor( 5, argv );
  pix.blu = getColor( 6, argv );
  setColorPixel( img, nrows/2, ncols/2, pix );

  /* write out the image */
  writePPMimage( img, argv[1] );

  /* free memory */
  freeColorImage( &img );
}

Comments: Change the progam so that it puts two pixels next to each other, or two pixels separated by a black pixel. Do this to get an intuition about how pixels in the image file corresponds to physical pixels on the monitor. Look at your images on a variety of monitors with a variety of resolutions.