File tree Expand file tree Collapse file tree 1 file changed +14
-3
lines changed
src/deepali/utils/imageio Expand file tree Collapse file tree 1 file changed +14
-3
lines changed Original file line number Diff line number Diff line change @@ -218,12 +218,13 @@ def read_meta_image_from_fileobj(f: io.BufferedReader) -> Tuple[np.ndarray, Meta
218218 "ElementDataFile" ,
219219 ):
220220 meta [key ] = value
221+ elif key == "HeaderSize" :
222+ meta [key ] = np .intp (value )
221223 elif key in (
222224 "NDims" ,
223225 "ID" ,
224226 "ParentID" ,
225227 "CompressedDataSize" ,
226- "HeaderSize" ,
227228 "HeaderSizePerSlice" ,
228229 "ElementNumberOfChannels" ,
229230 ):
@@ -268,8 +269,18 @@ def read_meta_image_from_fileobj(f: io.BufferedReader) -> Tuple[np.ndarray, Meta
268269 element_size = np .dtype (meta ["ElementType" ]).itemsize
269270 increment = np .prod (shape [1 :], dtype = int ) * element_size
270271
271- f .seek (meta_size , 0 )
272- f .seek ((meta .get ("HeaderSize" ) or 0 ), 1 )
272+ header_size = int ( meta .get ("HeaderSize" ) or 0 )
273+ if header_size == - 1 :
274+ #See https://github.com/Kitware/MetaIO/blob/1a031fd8223c4846e2f90f50216cbcb415d52018/src/metaImage.cxx#L2601 for reference
275+ data_quantity = int (np .prod (meta ["DimSize" ])) #type: ignore
276+ element_size = int (np .dtype (meta ["ElementType" ]).itemsize )
277+ read_size = data_quantity * int (meta ["ElementNumberOfChannels" ]) * element_size #type: ignore
278+ f .seek (- read_size , 2 )
279+ elif header_size >= 0 :
280+ f .seek (meta_size + header_size , 0 )
281+ else :
282+ raise ValueError (f"Invalid HeaderSize { header_size } " )
283+
273284 if meta .get ("CompressedData" ):
274285 if meta ["CompressedDataSize" ] is None :
275286 raise ValueError ("CompressedDataSize needs to be specified when using CompressedData" )
You can’t perform that action at this time.
0 commit comments