Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;
}
Esempio n. 4
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);
}
Esempio n. 5
0
File: main.c Progetto: pavelgrib/hdr
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;
}
Esempio n. 6
0
void Image::writeToFile(const char *outputFile){
	WritePFM(outputFile, width, height, numComponents, this->buffer);
}