Commit 41e2f5abf75c614eb8c667c116b1fe3375d7ad94

Authored by David Mayerich
1 parent 9d34229e

fixed finite mask bug, bypass file size detection because it doesn't work for large files

Showing 2 changed files with 20 additions and 4 deletions   Show diff stats
stim/envi/envi.h
... ... @@ -83,8 +83,22 @@ public:
83 83 return true;
84 84 }
85 85  
  86 + static size_t file_size(std::string filename){
  87 + FILE *p_file = NULL;
  88 + p_file = fopen(filename.c_str(),"rb");
  89 + if(!p_file){
  90 + std::cout<<"ERROR: could not open "<<filename<<std::endl;
  91 + exit(1);
  92 + }
  93 + fseek(p_file,0,SEEK_END);
  94 + size_t size = ftell(p_file);
  95 + fclose(p_file);
  96 + return size;
  97 + }
  98 +
86 99 //test to determine if the specified file is an ENVI file
87 100 static bool is_envi(std::string fname, std::string hname = ""){
  101 + return true;
88 102 stim::filename data_file(fname);
89 103 stim::filename header_file;
90 104 if(hname == ""){ //if the header isn't provided
... ... @@ -97,11 +111,13 @@ public:
97 111 if(H.load(header_file) == false) //load the header file, if it doesn't load return false
98 112 return false;
99 113 size_t targetBytes = H.data_bytes(); //get the number of bytes that SHOULD be in the data file
100   - std::ifstream infile(data_file.str(), std::ifstream::ate | std::ifstream::binary); //load the data file
101   - if(!infile) return false; //if the data file doesn't load, return false
102   - size_t bytes = infile.tellg(); //get the number of actual bytes in the file
  114 + //std::ifstream infile(data_file.str(), std::ifstream::binary); //load the data file
  115 + //if(!infile) return false; //if the data file doesn't load, return false
  116 + //size_t bytes = infile.tellg(); //get the number of actual bytes in the file
  117 + size_t bytes = file_size(fname);
103 118 if(bytes != targetBytes) return false; //if the data doesn't match the header, return false
104 119 return true; //otherwise everything looks fine
  120 +
105 121 }
106 122  
107 123  
... ...
stim/envi/hsi.h
... ... @@ -142,7 +142,7 @@ public:
142 142 void mask_finite(unsigned char* out_mask, unsigned char* mask, bool PROGRESS = false){
143 143 size_t XY = X() * Y();
144 144 if(mask == NULL) //if no mask is provided
145   - memset(mask, 255, XY * sizeof(unsigned char)); //initialize the mask to 255
  145 + memset(out_mask, 255, XY * sizeof(unsigned char)); //initialize the mask to 255
146 146 else //if a mask is provided
147 147 memcpy(out_mask, mask, XY * sizeof(unsigned char)); //initialize the current mask to that one
148 148 T* page = (T*)malloc(R[0] * R[1] * sizeof(T)); //allocate space for a page of data
... ...