rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void convertPPMtoPGM(FILE *fpPPM, FILE *fpPGM);
void convertPPMtoPGMbinary(FILE *fpPPM, FILE *fpPGM);
#define fileName1 "D:\\YANA STUDY\\PROGRAMMING\\Homework Programming\\HW4\\snail.ppm" //ex alef
#define fileName2 "D:\\YANA STUDY\\PROGRAMMING\\Homework Programming\\HW4\\snail.pgm" //ex alef
#define fileName3 "D:\\YANA STUDY\\PROGRAMMING\\Homework Programming\\HW4\\party.ppm" //ex gimel for alf
#define fileName4 "D:\\YANA STUDY\\PROGRAMMING\\Homework Programming\\HW4\\party.pgm"//ex gimel for alef
#define SIZE_OF_FORMAT 2
#define SIZE_OF_COMMENTS 10
void checkIfExist(FILE *fp);
void main(){
FILE *fpPPM; //pointer to file in PPM format in ASCII
FILE *fpPGM; //pointer to file in PGM format in ASCII
FILE *fpPPMbinary;//pointer to file in PPM format in binary
FILE *fpPGMbinary;//pointer to file in PPM format in binary
fpPPM=fopen(fileName1,"r");
fpPGM=fopen(fileName2,"w");
fpPPMbinary=fopen(fileName3,"rb");
fpPGMbinary=fopen(fileName4,"wb");
checkIfExist(fpPPM);
checkIfExist(fpPPMbinary);
convertPPMtoPGM(fpPPM,fpPGM);// color snail to grey snail (ASCII)
convertPPMtoPGMbinary(fpPPMbinary, fpPGMbinary);//color party to grey party (binary)
fclose(fpPPM);
fclose(fpPGM);
fclose(fpPPMbinary);
fclose(fpPGMbinary);
}
void checkIfExist(FILE *fp){
if(fp==NULL){
printf("file doesn't exist\n");
exit(1);
}
}
void convertPPMtoPGMbinary(FILE *fpPPM, FILE *fpPGM){
char format[SIZE_OF_FORMAT];
int length, height, depth;
int red;
int blue;
int green;
int greyColor;
int i=1;
int binaryDataStart;
int totalSize;
fscanf(fpPPM,"%s",format);
fscanf(fpPPM,"%d",&length);
fscanf(fpPPM,"%d",&height);
fscanf(fpPPM,"%d",&depth);
fprintf(fpPGM,"P5 ");
fprintf(fpPGM,"%d ",length);
fprintf(fpPGM,"%d ",height);
fprintf(fpPGM,"%d ",depth);
totalSize=height*3*length; //amount of numbers
binaryDataStart=ftell(fpPPM); //current location of the sign (after reading the header)
while(i<totalSize)
{
fseek(fpPPM,binaryDataStart+sizeof(int)*i,SEEK_SET);
fread(&red,sizeof(int),1,fpPPM);
fread(&green,sizeof(int),1,fpPPM);
fread(&blue,sizeof(int),1,fpPPM);
greyColor=red;
fwrite(&greyColor,sizeof(greyColor),1,fpPGM);
i=i+3;
}
}
void convertPPMtoPGM(FILE *fpPPM,FILE *fpPGM)
{
char format[SIZE_OF_FORMAT];
char comments[SIZE_OF_COMMENTS];
int height, length;
int counter;
int greyColor;
int size;
int red;
int green;
int blue;
int i;
int depth;
fscanf(fpPPM,"%s",format);
fscanf(fpPPM,"%s %s",comments, comments);
fscanf(fpPPM,"%d",&length);
fscanf(fpPPM,"%d",&height);
fscanf(fpPPM,"%d",&depth);
size=height*3*length*3;
fprintf(fpPGM,"P2\n");
fprintf(fpPGM,"%d\n",length);
fprintf(fpPGM,"%d\n",height);
fprintf(fpPGM,"%d\n",depth);
for(counter=0;counter<size; counter++)
{
fscanf(fpPPM,"%d",&red);
fscanf(fpPPM,"%d",&green);
fscanf(fpPPM,"%d",&blue);
greyColor=(red+green+blue)/3;
fprintf(fpPGM,"%d ",greyColor);
counter+=3;
}
}