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));
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.