Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a C++ that does the following : Read a PGM image, store it in an array, an

ID: 3796126 • Letter: W

Question

Write a C++ that does the following :

Read a PGM image, store it in an array, and output it to a new file (with a different name!). Once you get that working, see if you can get any of the following working: Create a photographic negative of it Create a thumbnail (max # rows or columns: 64) Rotate it 180 degrees (simple...read the data and store it in the array starting at the end instead of the beginning) And here's a cool one: subtract each pixel from the one right before it. (For column 0, set it to zero.) The add 1/2 maxval. Do it, look at it, and figure out why it looks the way it does. BTW, this is essentially doing a horizontal high pass filter of the image. What features are left, and what features disappear?

Explanation / Answer


this for to store pgm file as taken example

char matrix[80][800];
int index=0;

ifstream infile("something.pgm");

infile.ignore(2000' '); //ignore the first line
infile.ignore(2000' '); //these can also be changed to
infile.ignore(2000' '); //infile.getline(...) so that you
infile.ignore(2000' '); //can use the data if need be.

while(!infile.eof())
{
infile.getline(matrix[index],90,' ');
index++;
}

infile.close();

//This is reading binary file(pgm)


typedef unsigned char pixel;
typedef struct {
char filetype[6];
int width;
int height;
int maxgrey;
pixel* image;
} PgmType;

void readpgm (PgmType* pgmfile, char input[])
{
stream infile; //in stream
fpos_t filepos; //bytes in header text

infile = fopen(input, "r");
if (infile == NULL) fatal("Cannot open input file");



do
{
if(fscanf(infile, "%2s%d%d%d", &pgmfile->filetype, &pgmfile->width, &pgmfile->height, &pgmfile->maxgrey) != 8) //read in header file and check for error
fatal("Input nt successfuly read");

if(strcmp(pgmfile->filetype, "P3") != 0)
{
fatal("File invalid: Does not start with "P5"");
break;
}
}
while(fgetc(infile) != ' ');



fgetpos(infile, &filepos);

//determines how many bytes the header text is

printf("%i ",filepos);

fclose(infile); //close input file

infile = fopen(input, "rb");

if(infile == NULL) fatal("Cannot open input file");

fsetpos(infile, &filepos); //skip over header and position pointer to the first pixel

pgmfile->image = (pixel*) malloc(pgmfile->width * pgmfile->height * sizeof(pixel));   

if(pgmfile->image == NULL)

fatal("Error allocating memory");

while(!feof (infile))
{
printf("%i",fread(pgmfile->image, sizeof(pixel), pgmfile->width * pgmfile->height, infile));
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote