#include <stdlib.h>
#include <stdio.h>
#include "../basicColorImage.c"
/* The string rgb shows what color from the old image
should go into the color for the new image. For
eg. "BRG" means blue goes to red, red goes to
green, and green goes to blue.
'0' means to set all the pixels of the corresponding
channel to black. For eg. "B0R" means to swap blue
and red, and to set green to zero.
*/
void swapColors( colorImage img, char *rgb )
{
int r, c;
pixel pix;
unsigned char red, grn, blu;
for ( r=0; r<img.nrows; r++ )
for ( c=0; c<img.ncols; c++ )
{
pix = getColorPixel( img, r, c ) ;
red = pix.red; grn = pix.grn; blu = pix.blu;
if ( rgb[0] == 'G' )
pix.red = grn;
else if ( rgb[0] == 'B' )
pix.red = blu;
else if ( rgb[0] == '0' )
pix.red = 0;
if ( rgb[1] == 'R' )
pix.grn = red;
else if ( rgb[1] == 'B' )
pix.grn = blu;
else if ( rgb[1] == '0' )
pix.grn = 0;
if ( rgb[2] == 'R' )
pix.blu = pix.red;
else if ( rgb[2] == 'G' )
pix.blu = grn;
else if ( rgb[2] == '0' )
pix.blu = 0;
setColorPixel( img, r, c, pix );
}
}
int main ( int argc, char* argv[] )
{
colorImage img;
double factor ;
if ( argc != 4 )
{
printf("swapColors oldImage newImage RGB-permuted\n");
system( "pause" );
exit( EXIT_FAILURE );
}
/* read in the old image */
readPPMimage( &img, argv[1]);
/* add in the constant value */
swapColors( img, argv[3] ) ;
/* write the image to disk and free memory */
writePPMimage( img, argv[2]);
freeColorImage( &img );
}
Comments: