@@ -73,6 +73,26 @@ def test_read_multi_frame_sm_image_native(self):
7373 )
7474 np .testing .assert_array_equal (frame , pixel_array [i , ...])
7575
76+ def test_read_multi_frame_sm_image_jpegls (self ):
77+ filename = str (self ._test_dir .joinpath ('sm_image_jpegls.dcm' ))
78+ dataset = dcmread (filename )
79+ pixel_array = dataset .pixel_array
80+ with ImageFileReader (filename ) as reader :
81+ assert reader .number_of_frames == 25
82+ indices = list (range (reader .number_of_frames ))
83+ shuffle (indices )
84+ for i in indices :
85+ frame = reader .read_frame (i , correct_color = False )
86+ assert isinstance (frame , np .ndarray )
87+ assert frame .ndim == 3
88+ assert frame .dtype == np .uint8
89+ assert frame .shape == (
90+ reader .metadata .Rows ,
91+ reader .metadata .Columns ,
92+ reader .metadata .SamplesPerPixel ,
93+ )
94+ np .testing .assert_array_equal (frame , pixel_array [i , ...])
95+
7696 def test_read_multi_frame_sm_image_numbers_native (self ):
7797 filename = str (self ._test_dir .joinpath ('sm_image_numbers.dcm' ))
7898 dataset = dcmread (filename )
@@ -212,3 +232,87 @@ def test_read_single_frame_ct_image_dicom_file_like_opened(self):
212232 reader .metadata .Columns ,
213233 )
214234 np .testing .assert_array_equal (frame , pixel_array )
235+
236+ def test_read_single_frame_sm_image_jpegls_dicom_bytes_io (self ):
237+ filename = str (self ._test_dir .joinpath ("sm_image_jpegls.dcm" ))
238+ dcm = DicomBytesIO (open (filename , "rb" ).read ())
239+
240+ dataset = dcmread (filename )
241+ pixel_array = dataset .pixel_array
242+ with ImageFileReader (dcm ) as reader :
243+ assert reader .number_of_frames == 25
244+ for fno in range (reader .number_of_frames ):
245+ frame = reader .read_frame (fno )
246+ assert isinstance (frame , np .ndarray )
247+ assert frame .ndim == 3
248+ assert frame .dtype == np .uint8
249+ assert frame .shape == (
250+ reader .metadata .Rows ,
251+ reader .metadata .Columns ,
252+ 3 ,
253+ )
254+ np .testing .assert_array_equal (frame , pixel_array [fno ])
255+
256+ def test_read_single_frame_sm_image_jpegls_nobot_dicom_bytes_io (self ):
257+ filename = str (self ._test_dir .joinpath ("sm_image_jpegls_nobot.dcm" ))
258+ dcm = DicomBytesIO (open (filename , "rb" ).read ())
259+
260+ dataset = dcmread (filename )
261+ pixel_array = dataset .pixel_array
262+ with ImageFileReader (dcm ) as reader :
263+ assert reader .number_of_frames == 25
264+ for fno in range (reader .number_of_frames ):
265+ frame = reader .read_frame (fno )
266+ assert isinstance (frame , np .ndarray )
267+ assert frame .ndim == 3
268+ assert frame .dtype == np .uint8
269+ assert frame .shape == (
270+ reader .metadata .Rows ,
271+ reader .metadata .Columns ,
272+ 3 ,
273+ )
274+ np .testing .assert_array_equal (frame , pixel_array [fno ])
275+
276+ def test_read_single_frame_sm_image_jpegls_dicom_file_like_opened (self ):
277+ # Test reading frames from an opened DicomFileLike file
278+ filename = self ._test_dir .joinpath ("sm_image_jpegls.dcm" )
279+ dcm = DicomFileLike (filename .open ("rb" ))
280+
281+ dataset = dcmread (filename )
282+ pixel_array = dataset .pixel_array
283+ with ImageFileReader (dcm ) as reader :
284+ assert reader .number_of_frames == 25
285+ for fno in range (reader .number_of_frames ):
286+ frame = reader .read_frame (fno )
287+ assert isinstance (frame , np .ndarray )
288+ assert frame .ndim == 3
289+ assert frame .dtype == np .uint8
290+ assert frame .shape == (
291+ reader .metadata .Rows ,
292+ reader .metadata .Columns ,
293+ 3 ,
294+ )
295+ np .testing .assert_array_equal (frame , pixel_array [fno ])
296+
297+ def test_read_single_frame_sm_image_jpegls_nobot_dicom_file_like_opened (
298+ self
299+ ):
300+ # Test reading frames from an opened DicomFileLike file
301+ filename = self ._test_dir .joinpath ("sm_image_jpegls_nobot.dcm" )
302+ dcm = DicomFileLike (filename .open ("rb" ))
303+
304+ dataset = dcmread (filename )
305+ pixel_array = dataset .pixel_array
306+ with ImageFileReader (dcm ) as reader :
307+ assert reader .number_of_frames == 25
308+ for fno in range (reader .number_of_frames ):
309+ frame = reader .read_frame (fno )
310+ assert isinstance (frame , np .ndarray )
311+ assert frame .ndim == 3
312+ assert frame .dtype == np .uint8
313+ assert frame .shape == (
314+ reader .metadata .Rows ,
315+ reader .metadata .Columns ,
316+ 3 ,
317+ )
318+ np .testing .assert_array_equal (frame , pixel_array [fno ])
0 commit comments