#include "iflinterface.h" /*************************************************************************** R E A D I M A G E ***************************************************************************/ void readJDImage( char *filename, JDImage &image) { // open the file named by 'filename' iflStatus sts; iflFile* file = iflFile::open(filename, O_RDONLY, &sts); if (sts != iflOKAY) { image.resize(0,0); printf ("Could not open file:%s:\n",filename); return; } // read the entire image (just the first plane in z if image has depth // into a buffer of unsiged chars iflSize dims; file->getDimensions(dims); //unsigned char* data = new unsigned char[dims.x*dims.y*dims.c]; image.resize(dims.x,dims.y); static int channellist [] = {0 , 2 ,1 ,0}; iflConfig cfg(iflUChar, iflInterleaved, 4, channellist , 0, iflUpperLeftOrigin); sts = file->getTile(0, 0, 0, dims.x, dims.y, 1, image.pixels, &cfg); if (sts != iflOKAY) { image.resize(0,0); return; } image.setAlpha255(); // close the file file->close(); } /*************************************************************************** W R I T E I M A G E ***************************************************************************/ void writeJDImage(char *filename, JDImage &image) { // Get parameters right based on file format char *fileExtension = filename+strlen(filename)-3; if (strcasecmp(fileExtension,"jpg")==0) { writeIFLjpeg(filename, image); } else if (strcasecmp(fileExtension,"ppm")==0) { writeIFLppm(filename, image); } else if (strcasecmp(fileExtension,"rgb")==0) { writeIFLrgb(filename, image); } else { puts ("Known file extensions jpg, ppm, rgb only"); writeIFLrgb(filename, image); } } void writeIFLjpeg(char *filename, JDImage &image) { //puts ("jpeg"); // create a one-channel, unsigned char image file iflSize dims(image.xsize, image.ysize, 3); iflFileConfig fc(&dims, iflUChar); iflStatus sts; iflFile* file = iflFile::create(filename, NULL, &fc, NULL, &sts); if (sts != iflOKAY) { perror ("can't open file to write jpg!"); return; } // write a tile of data to it static int channellist [] = {3,2,1,0}; iflConfig cfg(iflUChar, iflInterleaved, 4, channellist , 0, iflUpperLeftOrigin); sts = file->setTile(0, 0, 0, image.xsize, image.ysize, 1, image.pixels, &cfg); if (sts != iflOKAY) { puts ("cant write data to file");} file->close(); } void writeIFLrgb(char *filename, JDImage &image) { // create a one-channel, unsigned char image file iflSize dims(image.xsize, image.ysize, 4); iflFileConfig fc(&dims, iflUChar); iflStatus sts; iflFile* file = iflFile::create(filename, NULL, &fc, NULL, &sts); if (sts != iflOKAY) { puts ("can't open file to write rgb"); return; } // write a tile of data to it static int channellist [] = {3,2,1,0}; iflConfig cfg(iflUChar, iflInterleaved, 4, channellist , 0, iflUpperLeftOrigin); sts = file->setTile(0, 0, 0, image.xsize, image.ysize, 1, image.pixels, &cfg); if (sts != iflOKAY) { puts ("cant write data to file");} file->close(); } void writeIFLppm(char *filename, JDImage &image) { // create a one-channel, unsigned char image file iflSize dims(image.xsize, image.ysize, 3); iflFileConfig fc(&dims, iflUChar); iflStatus sts; iflFile* file = iflFile::create(filename, NULL, &fc, NULL, &sts); if (sts != iflOKAY) { puts ("can't open file to write ppm"); return; } // write a tile of data to it static int channellist [] = {0,2,1,3}; iflConfig cfg(iflUChar, iflInterleaved, 4, channellist , 0, iflUpperLeftOrigin); sts = file->setTile(0, 0, 0, image.xsize, image.ysize, 1, image.pixels, &cfg); if (sts != iflOKAY) { puts ("cant write data to file");} file->close(); }