00001 #include <iostream> 00002 #include <fstream> 00003 #include <unistd.h> 00004 #include <errno.h> 00005 #include <stdlib.h> 00006 #include "vuFileHelper.h" 00007 #include "Volume/Regular/Unimodal/3d/1B/1B.h" 00008 #include "Volume/Regular/Unimodal/3d/2B/2B.h" 00009 #include "vuHistogram.h" 00010 #include "vuConvert.h" 00011 00012 using namespace std; 00013 00014 void usage(const char* exe); 00015 bool readnumber(const char* str, int& number); 00016 00017 int main(int argc, char ** argv) 00018 { 00019 if(argc != 7) { 00020 usage(argv[0]); 00021 return -1; 00022 } 00023 00024 vuString fileName = argv[1]; 00025 vuString fileType = vuFileHelper::getFileType(fileName); 00026 if (fileType.isEmpty()) { 00027 cout << "Error: Wrong filetype." << endl; 00028 return -1; 00029 } 00030 00031 vuString outfileName = argv[2]; 00032 00033 int inter[4]; 00034 int i; 00035 for(i=0; i<4; i++) 00036 { 00037 if(!readnumber(argv[i+3], inter[i])) { 00038 usage(argv[0]); 00039 return false; 00040 } 00041 } 00042 cout << "loading" << endl; 00043 vu11122 volume; 00044 volume.setFileName(fileName); 00045 if(!volume.read()) { 00046 cout << "Error: Could not load file " << fileName << "." << endl; 00047 return -1; 00048 } 00049 00050 vuMap map; 00051 map.createRamp(inter[0], inter[1], inter[2], inter[3]); 00052 volume.remap(map); 00053 00054 vu11121 bvol; 00055 vuConvert::convert(bvol, volume); 00056 bvol.setFileName(outfileName); 00057 cout << "writing file " << bvol.getFileName() << endl; 00058 bvol.write(); 00059 00060 cout << "done." << endl; 00061 return 0; 00062 } 00063 00064 void usage(const char* exe) 00065 { 00066 const char *file = strrchr(exe,'/'); 00067 if(!file) 00068 { 00069 file = strrchr(exe,'\\'); 00070 if(file) file++; 00071 else file = exe; 00072 } else file++; 00073 00074 cout << "usage: " << file << " inputfile outputfile " 00075 << "start startval end endval" << endl << endl; 00076 cout << "inputfile name of vud file (data type word) including extension"<<endl; 00077 cout << "outputfile name of output vud file (data type byte)"<<endl; 00078 cout << "start start of intensity range to map" << endl; 00079 cout << "startval start value of range to map to" << endl; 00080 cout << "end end of intensity range to map" << endl; 00081 cout << "endval end value of range to map to" << endl; 00082 } 00083 00084 bool readnumber(const char* str, int& number) 00085 { 00086 char *endp; 00087 errno = 0; 00088 number = strtol(str,&endp,10); 00089 if(errno || 00090 endp != str+strlen(str)) return false; 00091 return true; 00092 } 00093