Write a C that does the following Read a PGM image store it

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?

Solution


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));
}
}

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, s
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, s

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site