Commit 8057237a7a52a0d9a288a315a5a8fcb222f18bca
1 parent
abdb93f5
added an envi::open() function that re-opens a previously opened file with minimal processing
Showing
1 changed file
with
25 additions
and
14 deletions
Show diff stats
stim/envi/envi.h
@@ -18,6 +18,7 @@ namespace stim{ | @@ -18,6 +18,7 @@ namespace stim{ | ||
18 | class envi{ | 18 | class envi{ |
19 | 19 | ||
20 | void* file; //void pointer to the relevant file reader (bip, bsq, or bil - with appropriate data type) | 20 | void* file; //void pointer to the relevant file reader (bip, bsq, or bil - with appropriate data type) |
21 | + std::string fname; //file name used for repeated opening and closing | ||
21 | 22 | ||
22 | public: | 23 | public: |
23 | 24 | ||
@@ -131,22 +132,16 @@ public: | @@ -131,22 +132,16 @@ public: | ||
131 | 132 | ||
132 | } | 133 | } |
133 | 134 | ||
134 | - /// Open an existing ENVI file given the filename and a header structure | ||
135 | - | ||
136 | - /// @param filename is the name of the ENVI binary file | ||
137 | - /// @param header is an ENVI header structure | ||
138 | - bool open(std::string filename, stim::envi_header h){ | ||
139 | - allocate(); | ||
140 | - | ||
141 | - header = h; | 135 | + /// Open a previously opened ENVI file |
136 | + bool open(){ | ||
142 | 137 | ||
143 | //load the file | 138 | //load the file |
144 | if(header.interleave == envi_header::BSQ) { //if the infile is bsq file | 139 | if(header.interleave == envi_header::BSQ) { //if the infile is bsq file |
145 | if(header.data_type == envi_header::float32) { | 140 | if(header.data_type == envi_header::float32) { |
146 | - return ((bsq<float>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 141 | + return ((bsq<float>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
147 | } | 142 | } |
148 | else if(header.data_type == envi_header::float64) { | 143 | else if(header.data_type == envi_header::float64) { |
149 | - return ((bsq<double>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 144 | + return ((bsq<double>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
150 | } | 145 | } |
151 | else | 146 | else |
152 | return false; | 147 | return false; |
@@ -154,10 +149,10 @@ public: | @@ -154,10 +149,10 @@ public: | ||
154 | 149 | ||
155 | else if(header.interleave == envi_header::BIL) { //if the infile is bil file | 150 | else if(header.interleave == envi_header::BIL) { //if the infile is bil file |
156 | if(header.data_type == envi_header::float32) { | 151 | if(header.data_type == envi_header::float32) { |
157 | - return ((bil<float>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 152 | + return ((bil<float>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
158 | } | 153 | } |
159 | else if(header.data_type == envi_header::float64) { | 154 | else if(header.data_type == envi_header::float64) { |
160 | - return ((bil<double>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 155 | + return ((bil<double>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
161 | } | 156 | } |
162 | else | 157 | else |
163 | return false; | 158 | return false; |
@@ -165,10 +160,10 @@ public: | @@ -165,10 +160,10 @@ public: | ||
165 | 160 | ||
166 | else if(header.interleave == envi_header::BIP) { //if the infile is bip file | 161 | else if(header.interleave == envi_header::BIP) { //if the infile is bip file |
167 | if(header.data_type == envi_header::float32) { | 162 | if(header.data_type == envi_header::float32) { |
168 | - return ((bip<float>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 163 | + return ((bip<float>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
169 | } | 164 | } |
170 | else if(header.data_type == envi_header::float64) { | 165 | else if(header.data_type == envi_header::float64) { |
171 | - return ((bip<double>*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); | 166 | + return ((bip<double>*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); |
172 | } | 167 | } |
173 | else | 168 | else |
174 | return false; | 169 | return false; |
@@ -176,6 +171,22 @@ public: | @@ -176,6 +171,22 @@ public: | ||
176 | 171 | ||
177 | return true; | 172 | return true; |
178 | 173 | ||
174 | + | ||
175 | + } | ||
176 | + | ||
177 | + /// Open an existing ENVI file given the filename and a header structure | ||
178 | + | ||
179 | + /// @param filename is the name of the ENVI binary file | ||
180 | + /// @param header is an ENVI header structure | ||
181 | + bool open(std::string filename, stim::envi_header h){ | ||
182 | + allocate(); | ||
183 | + | ||
184 | + header = h; //store the header | ||
185 | + fname = filename; //save the filename | ||
186 | + | ||
187 | + return open(); //open the ENVI file; | ||
188 | + | ||
189 | + | ||
179 | } | 190 | } |
180 | 191 | ||
181 | /// Open an existing ENVI file given the file and header names. | 192 | /// Open an existing ENVI file given the file and header names. |