in ez_wsi_dicomweb/local_dicom_slide_cache.py [0:0]
def _load_frame_list(buffer: BinaryIO) -> List[bytes]:
"""Loads DICOM instance frames into memory as a list of frames(bytes).
Args:
buffer: Buffer containing binary DICOM instance data.
Returns:
List of bytes encoded in DICOM instance frames.
"""
with pydicom.dcmread(buffer) as ds:
if 'PixelData' not in ds or not ds.PixelData:
return []
try:
number_of_frames = int(ds.NumberOfFrames)
except (ValueError, AttributeError) as _:
return []
if number_of_frames < 1:
return []
if _is_unencapsulated_image_transfer_syntax(ds.file_meta.TransferSyntaxUID):
step = int(len(ds.PixelData) / number_of_frames)
return [
ds.PixelData[fnum * step : (fnum + 1) * step]
for fnum in range(number_of_frames)
]
if _PYDICOM_MAJOR_VERSION <= 2:
# pytype: disable=module-attr
frame_bytes_generator = pydicom.encaps.generate_pixel_data_frame(
ds.PixelData, number_of_frames
)
# pytype: enable=module-attr
else:
# pytype: disable=module-attr
frame_bytes_generator = pydicom.encaps.generate_frames(
ds.PixelData, number_of_frames=number_of_frames
)
# pytype: enable=module-attr
return [frame_bytes for frame_bytes in frame_bytes_generator]