Example: Reading a Subselection

The following example reads only a portion of the previous image, using the dataspace keywords to H5D_READ.

 
PRO ex_read_hdf5_select 
 
   ; Open the HDF5 file. 
   file = FILEPATH('hdf5_test.h5', $ 
      SUBDIRECTORY=['examples', 'data']) 
   file_id = H5F_OPEN(file) 
 
   ; Open the image dataset within the file. 
   dataset_id1 = H5D_OPEN(file_id, '/images/Eskimo') 
    
   ; Open up the dataspace associated with the Eskimo image. 
   dataspace_id = H5D_GET_SPACE(dataset_id1) 
    
   ; Now choose our hyperslab. We will pick out only the central 
   ; portion of the image. 
   start = [100, 100] 
   count = [200, 200] 
   ; Be sure to use /RESET to turn off all other 
   ; selected elements. 
   H5S_SELECT_HYPERSLAB, dataspace_id, start, count, $ 
      STRIDE=[2, 2], /RESET 
 
   ; Create a simple dataspace to hold the result. If we 
   ; didn't supply 
   ; the memory dataspace, then the result would be the same size 
   ; as the image dataspace, with zeroes everywhere except our 
   ; hyperslab selection. 
   memory_space_id = H5S_CREATE_SIMPLE(count) 
    
   ; Read in the actual image data. 
   image = H5D_READ(dataset_id1, FILE_SPACE=dataspace_id, $ 
      MEMORY_SPACE=memory_space_id) 
 
   ; Now open and read the color palette associated with 
   ; this image. 
   dataset_id2 = H5D_OPEN(file_id, '/images/Eskimo_palette') 
   palette = H5D_READ(dataset_id2) 
 
   ; Close all our identifiers so we don't leak resources. 
   H5S_CLOSE, memory_space_id 
   H5S_CLOSE, dataspace_id 
   H5D_CLOSE, dataset_id1 
   H5D_CLOSE, dataset_id2 
   H5F_CLOSE, file_id 
 
   ; Display the data. 
   DEVICE, DECOMPOSED=0 
   WINDOW, XSIZE=count[0], YSIZE=count[1] 
   TVLCT, palette[0,*], palette[1,*], palette[2,*] 
    
   ; We need to use /ORDER since the image is stored  
   ; top-to-bottom. 
   TV, image, /ORDER 
 
END