int main(int argc, char** argv) { PPMImage *image; if(argc > 1) { image = readPPM("flower.ppm"); } else { image = readStreamPPM(stdin); } AccurateImage *imageUnchanged = convertImageToNewFormat(image); // save the unchanged image from input image AccurateImage *imageBuffer = createEmptyImage(image); AccurateImage *imageSmall = createEmptyImage(image); AccurateImage *imageBig = createEmptyImage(image); PPMImage *imageOut; imageOut = (PPMImage *)malloc(sizeof(PPMImage)); imageOut->data = (PPMPixel*)malloc(image->x * image->y * sizeof(PPMPixel)); // Process the tiny case: performNewIdeaIteration(imageSmall, imageUnchanged, 2); performNewIdeaIteration(imageBuffer, imageSmall, 2); performNewIdeaIteration(imageSmall, imageBuffer, 2); performNewIdeaIteration(imageBuffer, imageSmall, 2); performNewIdeaIteration(imageSmall, imageBuffer, 2); // Process the small case: performNewIdeaIteration(imageBig, imageUnchanged,3); performNewIdeaIteration(imageBuffer, imageBig,3); performNewIdeaIteration(imageBig, imageBuffer,3); performNewIdeaIteration(imageBuffer, imageBig,3); performNewIdeaIteration(imageBig, imageBuffer,3); // save tiny case result performNewIdeaFinalization(imageSmall, imageBig, imageOut); if(argc > 1) { writePPM("flower_tiny.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // Process the medium case: performNewIdeaIteration(imageSmall, imageUnchanged, 5); performNewIdeaIteration(imageBuffer, imageSmall, 5); performNewIdeaIteration(imageSmall, imageBuffer, 5); performNewIdeaIteration(imageBuffer, imageSmall, 5); performNewIdeaIteration(imageSmall, imageBuffer, 5); // save small case performNewIdeaFinalization(imageBig, imageSmall,imageOut); if(argc > 1) { writePPM("flower_small.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // process the large case performNewIdeaIteration(imageBig, imageUnchanged, 8); performNewIdeaIteration(imageBuffer, imageBig, 8); performNewIdeaIteration(imageBig, imageBuffer, 8); performNewIdeaIteration(imageBuffer, imageBig, 8); performNewIdeaIteration(imageBig, imageBuffer, 8); // save the medium case performNewIdeaFinalization(imageSmall, imageBig, imageOut); if(argc > 1) { writePPM("flower_medium.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // free all memory structures freeImage(imageUnchanged); freeImage(imageBuffer); freeImage(imageSmall); freeImage(imageBig); free(imageOut->data); free(imageOut); free(image->data); free(image); return 0; }
int main(int argc, char** argv) { PPMImage *image; int size; if(argc > 1) { image = readPPM("flower.ppm"); } else { image = readStreamPPM(stdin); } AccurateImage *imageAccurate1_tiny = convertImageToNewFormat(image); AccurateImage *imageAccurate2_tiny = convertImageToNewFormat(image); // Process the tiny case: size = 2; performNewIdeaIteration(imageAccurate2_tiny, imageAccurate1_tiny, size); performNewIdeaIteration(imageAccurate1_tiny, imageAccurate2_tiny, size); performNewIdeaIteration(imageAccurate2_tiny, imageAccurate1_tiny, size); performNewIdeaIteration(imageAccurate1_tiny, imageAccurate2_tiny, size); performNewIdeaIteration(imageAccurate2_tiny, imageAccurate1_tiny, size); AccurateImage *imageAccurate1_small = convertImageToNewFormat(image); AccurateImage *imageAccurate2_small = convertImageToNewFormat(image); // Process the small case: size = 3; performNewIdeaIteration(imageAccurate2_small, imageAccurate1_small, size); performNewIdeaIteration(imageAccurate1_small, imageAccurate2_small, size); performNewIdeaIteration(imageAccurate2_small, imageAccurate1_small, size); performNewIdeaIteration(imageAccurate1_small, imageAccurate2_small, size); performNewIdeaIteration(imageAccurate2_small, imageAccurate1_small, size); AccurateImage *imageAccurate1_medium = convertImageToNewFormat(image); AccurateImage *imageAccurate2_medium = convertImageToNewFormat(image); // Process the medium case: size = 5; performNewIdeaIteration(imageAccurate2_medium, imageAccurate1_medium, size); performNewIdeaIteration(imageAccurate1_medium, imageAccurate2_medium, size); performNewIdeaIteration(imageAccurate2_medium, imageAccurate1_medium, size); performNewIdeaIteration(imageAccurate1_medium, imageAccurate2_medium, size); performNewIdeaIteration(imageAccurate2_medium, imageAccurate1_medium, size); AccurateImage *imageAccurate1_large = convertImageToNewFormat(image); AccurateImage *imageAccurate2_large = convertImageToNewFormat(image); size = 8; performNewIdeaIteration(imageAccurate2_large, imageAccurate1_large, size); performNewIdeaIteration(imageAccurate1_large, imageAccurate2_large, size); performNewIdeaIteration(imageAccurate2_large, imageAccurate1_large, size); performNewIdeaIteration(imageAccurate1_large, imageAccurate2_large, size); performNewIdeaIteration(imageAccurate2_large, imageAccurate1_large, size); // Save the images. PPMImage *final_tiny = performNewIdeaFinalization(imageAccurate2_tiny, imageAccurate2_small); PPMImage *final_small = performNewIdeaFinalization(imageAccurate2_small, imageAccurate2_medium); PPMImage *final_medium = performNewIdeaFinalization(imageAccurate2_medium, imageAccurate2_large); if(argc > 1) { writePPM("flower_tiny.ppm", final_tiny); writePPM("flower_small.ppm", final_small); writePPM("flower_medium.ppm", final_medium); } else { writeStreamPPM(stdout, final_tiny); writeStreamPPM(stdout, final_small); writeStreamPPM(stdout, final_medium); } return 0; }