@@ -225,8 +225,10 @@ def get_image_metadata_sdk_v1(self, image_no):
225225 self .pixel_size_y = img .IMAGE_SCALE_FACTOR [1 ]
226226
227227 view = pe_in .SourceView ()
228- image_metadata ["Bits allocated" ] = view .bitsAllocated ()
229- image_metadata ["Bits stored" ] = view .bitsStored ()
228+ self .bits_per_pixel = view .bitsAllocated ()
229+ image_metadata ["Bits allocated" ] = self .bits_per_pixel
230+ self .bits_stored = view .bitsStored ()
231+ image_metadata ["Bits stored" ] = self .bits_stored
230232 image_metadata ["High bit" ] = view .highBit ()
231233 image_metadata ["Pixel representation" ] = \
232234 view .pixelRepresentation ()
@@ -303,8 +305,10 @@ def get_image_metadata_sdk_v2(self, image_no):
303305 self .pixel_size_x = image_scale_factor [0 ]
304306 self .pixel_size_y = image_scale_factor [1 ]
305307
306- image_metadata ["Bits allocated" ] = view .bits_allocated
307- image_metadata ["Bits stored" ] = view .bits_stored
308+ self .bits_per_pixel = view .bits_allocated
309+ image_metadata ["Bits allocated" ] = self .bits_per_pixel
310+ self .bits_stored = view .bits_stored
311+ image_metadata ["Bits stored" ] = self .bits_stored
308312 image_metadata ["High bit" ] = view .high_bit
309313 image_metadata ["Pixel representation" ] = \
310314 view .pixel_representation
@@ -483,6 +487,8 @@ def write_metadata_xml(self, metadata_file):
483487 'pixels' : {
484488 'sizeX' : int (self .size_x ),
485489 'sizeY' : int (self .size_y ),
490+ 'type' : get_pixel_type (int (self .bits_per_pixel )),
491+ 'bits_stored' : int (self .significant_bits ),
486492 'physicalSizeX' : self .pixel_size_x ,
487493 'physicalSizeY' : self .pixel_size_y
488494 }
@@ -519,6 +525,22 @@ def write_metadata(self):
519525 )
520526 self .write_metadata_xml (metadata_file )
521527
528+ def get_pixel_type (bits ):
529+ '''get the OME-XML pixel type string from the bits per pixel'''
530+ if bits == 8 :
531+ return 'uint8'
532+ elif bits == 16 :
533+ return 'uint16'
534+ raise ValueError ("Allocated bits not supported: %d" % bits )
535+
536+ def get_data_type (bits ):
537+ '''get numpy data type from bits per pixel'''
538+ if bits == 8 :
539+ return numpy .uint8
540+ elif bits == 16 :
541+ return numpy .uint16
542+ raise ValueError ("Allocated bits not supported: %d" % bits )
543+
522544 def get_size (self , dim_range ):
523545 '''calculate the length in pixels of a dimension'''
524546 v = (dim_range [2 ] - dim_range [0 ]) / dim_range [1 ]
@@ -589,7 +611,8 @@ def create_tile_directory(self, series, resolution, width, height):
589611 self .zarr_group .create_dataset (
590612 "%s/%s" % (str (series ), str (resolution )),
591613 shape = (1 , 3 , 1 , height , width ),
592- chunks = (1 , 1 , 1 , self .tile_height , self .tile_width ), dtype = 'B'
614+ chunks = (1 , 1 , 1 , self .tile_height , self .tile_width ),
615+ dtype = get_data_type (self .bits_per_pixel )
593616 )
594617
595618 def make_planar (self , pixels , tile_width , tile_height ):
@@ -715,7 +738,10 @@ def write_tile(
715738 )
716739 height = int (height )
717740 pixel_buffer_size = width * height * 3
718- pixels = np .empty (pixel_buffer_size , dtype = 'B' )
741+ pixels = np .empty (
742+ pixel_buffer_size ,
743+ dtype = get_data_type (self .bits_per_pixel )
744+ )
719745 patch_id = patch_ids .pop (regions .index (region ))
720746 x_start , y_start = patch_id
721747 x_start *= self .tile_width
0 commit comments