void CreateAndSavePFM(const char *image_out) { width = 511; // set size of image to 511x511 pixels height = 511; numComponents = 3; float *img_out = new float [width*height*numComponents]; for ( uint i = 0 ; i < height ; ++i ) // height { for ( uint j = 0 ; j < width ; ++j ) // width { for ( uint k = 0 ; k < numComponents ; ++k ) // color channels - 3 for RGB images { uint index = i*width*numComponents + j*numComponents + k; //index within the image //set image to white img_out[index] = 1.0f; //R img_out[index + 1] = 1.0f;//G img_out[index + 2] = 1.0f;//B } } } WritePFM(image_out, width, height, numComponents, img_out); }
void LoadAndSavePFM(const char *image_in, const char *image_out) { float *img_in = loadPFM(image_in, width, height, numComponents); float *img_out = new float [width*height*numComponents]; for ( uint i = 0 ; i < height ; ++i ) // height { for ( uint j = 0 ; j < width ; ++j ) // width { for ( uint k = 0 ; k < numComponents ; ++k ) // color channels - 3 for RGB images { uint index = i*width*numComponents + j*numComponents + k; //index within the image img_out[index] = img_in[index]; //R img_out[index + 1] = img_in[index + 1];//G img_out[index + 2] = img_in[index + 2];//B } } } WritePFM(image_out, width, height, numComponents, img_out); }
int R2Image:: Write(const char *filename) const { // Parse input filename extension char *input_extension; if (!(input_extension = (char*)strrchr(filename, '.'))) { fprintf(stderr, "Output file has no extension (e.g., .jpg).\n"); return 0; } // Write file of appropriate type if (!strncmp(input_extension, ".bmp", 4)) return WriteBMP(filename); else if (!strncmp(input_extension, ".png", 4)) return WritePNG(filename); else if (!strncmp(input_extension, ".ppm", 4)) return WritePPM(filename, 1); else if (!strncmp(input_extension, ".pgm", 4)) return WritePGM(filename, 1); else if (!strncmp(input_extension, ".pfm", 4)) return WritePFM(filename); else if (!strncmp(input_extension, ".jpg", 5)) return WriteJPEG(filename); else if (!strncmp(input_extension, ".jpeg", 5)) return WriteJPEG(filename); // Should never get here fprintf(stderr, "Unrecognized image file extension"); return 0; }
void LoadPPMAndSavePFM(const char *image_in, const char *image_out) { unsigned char *img_in = loadPNM(image_in, width, height, numComponents); float *img_out = new float [width*height*numComponents]; for ( uint i = 0 ; i < height ; ++i ) // height { for ( uint j = 0 ; j < width ; ++j ) // width { for ( uint k = 0 ; k < numComponents ; ++k ) // color channels - 3 for RGB images { uint index = i*width*numComponents + j*numComponents + k; //index within the image //typecast 0 - 255 values to the 0.0f -> 1.0f range img_out[index] = static_cast<float>(img_in[index])/255.0f; //R img_out[index + 1] = static_cast<float>(img_in[index + 1])/255.0f;//G img_out[index + 2] = static_cast<float>(img_in[index + 2])/255.0f;//B } } } WritePFM(image_out, width, height, numComponents, img_out); }
int main(int count, char** argv) { unsigned int i; // all for CW1 // printf("----------------------------- HDR ----------------------------------\n\n"); // char* imgdir = "/Users/paul/Dropbox/Imperial/advanced-graphics/HW1/CO417-HW1/Memorial/"; // // // applying HDR to original images // char fileOutputNamePFM[1024]; // char fileOutputNamePPM[1024]; // concatenate(imgdir, "memorial_hdr.pfm", fileOutputNamePFM); // concatenate(imgdir, "memorial_hdr.ppm", fileOutputNamePPM); // FP_IMG* hdrImage = (FP_IMG*) malloc(sizeof(FP_IMG)); // makeHDRImage(imgdir, hdrImage); // WritePFM(fileOutputNamePFM, hdrImage); // LoadPFMAndSavePPM(fileOutputNamePFM, fileOutputNamePPM); // // // applying linear tone-mapping to HDR image // char toneMappedFilenamePFM[1024]; // char toneMappedFilenamePPM[1024]; // concatenate(imgdir, "memorial_tonemap.pfm", toneMappedFilenamePFM); // concatenate(imgdir, "memorial_tonemap.ppm", toneMappedFilenamePPM); // FP_IMG* toneMappedHDR = (FP_IMG*) malloc(sizeof(FP_IMG)); // toneMap(hdrImage, toneMappedHDR); // WritePFM(toneMappedFilenamePFM, toneMappedHDR); // LoadPFMAndSavePPM(toneMappedFilenamePFM, toneMappedFilenamePPM); // // // applying brightening to tone-mapped // char toneMappedBrightenedFilenamePFM[1024]; // char toneMappedBrightenedFilenamePPM[1024]; // concatenate(imgdir, "memorial_tm_brighter.pfm", toneMappedBrightenedFilenamePFM); // concatenate(imgdir, "memorial_tm_brighter.ppm", toneMappedBrightenedFilenamePPM); // FP_IMG* brighterHDRImage = (FP_IMG*) malloc(sizeof(FP_IMG)); // brightenPFM(toneMappedHDR, brighterHDRImage, 5000); // WritePFM(toneMappedBrightenedFilenamePFM, brighterHDRImage); // LoadPFMAndSavePPM(toneMappedBrightenedFilenamePFM, toneMappedBrightenedFilenamePPM); // // // applying gamma to brighened image // char gammaAppliedPFM[1024]; // char gammaAppliedPPM[1024]; // concatenate(imgdir, "memorial_gamma.pfm", gammaAppliedPFM); // concatenate(imgdir, "memorial_gamma.ppm", gammaAppliedPPM); // applyGamma(brighterHDRImage, 2.2); // WritePFM(gammaAppliedPFM, brighterHDRImage); // LoadPFMAndSavePPM(gammaAppliedPFM, gammaAppliedPPM); // // // printf("------------------------------ IBL ----------------------------------\n\n"); // // char* grace_imgdir = "/Users/paul/Dropbox/Imperial/advanced-graphics/HW1/CO417-HW1/GraceCathedral/"; // char ibl_original[1024]; // concatenate(grace_imgdir, "grace_latlong.pfm", ibl_original); // FP_IMG* relitImage = (FP_IMG*) malloc(sizeof(FP_IMG)); // generateRelitSphere(ibl_original, relitImage, 511, grace_imgdir); // // char EMSpherePFM[1024]; // char EMSpherePPM[1024]; // concatenate(grace_imgdir, "latlong_em.pfm", EMSpherePFM); // concatenate(grace_imgdir, "latlong_em.ppm", EMSpherePPM); // WritePFM(EMSpherePFM, relitImage); // LoadPFMAndSaveClampedPPM(EMSpherePFM, EMSpherePPM, 1.0); //// printImageData((void*)relitImage->data, 511, 511, 3, 1); // // printf("\n----------------------------- done --------------------------------\n\n"); // all for CW2 srand((unsigned int) time(NULL)); char* graceEMDir ="/Users/paul/Dropbox/Imperial/advanced-graphics/GraceCathedral/"; char graceEMPath[1024]; concatenate(graceEMDir, "grace_latlong.pfm", graceEMPath); char pfmFileName[1024], ppmFileName[1024]; char ppmPath[1024], pfmPath[1024]; FP_IMG* grace_em = (FP_IMG*) malloc(sizeof(FP_IMG)); loadPFM(graceEMPath, grace_em); // WritePFM("/Users/paul/Destop.test.pfm", grace_em); // LoadPFMAndSavePPM("/Users/paul/Destop.test.pfm", "/Users/paul/Destop.test.ppm"); FP_IMG* cdf_sampled = (FP_IMG*) malloc(sizeof(FP_IMG)); FP_IMG* phong_sampled = (FP_IMG*) malloc(sizeof(FP_IMG)); int nums[] = {64, 256, 1024}; for ( i = 0; i < 3; ++i ) { char buff[20], buff2[20]; sprintf(buff, "%d.pfm", nums[i]); sprintf(buff2, "%d.ppm", nums[i]); generateCDFSamples(grace_em, cdf_sampled, nums[i]); concatenate("grace_cdf_sampled", buff, pfmFileName); concatenate(graceEMDir, pfmFileName, pfmPath); concatenate("grace_cdf_sampled", buff2, ppmFileName); concatenate(graceEMDir, ppmFileName, ppmPath); WritePFM(pfmPath, cdf_sampled); LoadPFMAndSavePPM(pfmPath, ppmPath); generatePhongSamples(grace_em, phong_sampled, nums[i]); } cleanupFP(cdf_sampled); cleanupFP(grace_em); return 0; }
void Image::writeToFile(const char *outputFile){ WritePFM(outputFile, width, height, numComponents, this->buffer); }