The following sample program illustrates the use of Szip compression in HDF5.
This sample program is also available
in the subdirectory h5_examples/
.
#include "hdf5.h" #define NX 500 #define NY 600 #define CH_NX 100 #define CH_NY 25 int main(void) { hid_t file, data_space, dataset32, properties; float buf[NX][NY]; float buf_r[NX][NY]; hsize_t dims[2], chunk_size[2]; int i, j; unsigned szip_options_mask; unsigned szip_pixels_per_block; /* Initiliaze data buffer with some bogus data. */ for (i=0; i < NX; i++) { for (j=0; j < NY; j++) buf[i][j] = i + j; } /* Describe the size of the array. */ dims[0] = NX; dims[1] = NY; data_space = H5Screate_simple (2, dims, NULL); /* * Create a new file using read/write access, default file * creation properties, and default file access properties. */ file = H5Fcreate ("test.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); /* * Set the dataset creation property list to specify that * the raw data is to be partitioned into 100x100 element * chunks and that each chunk is to be compressed. */ chunk_size[0] = CH_NX; chunk_size[1] = CH_NY; properties = H5Pcreate (H5P_DATASET_CREATE); H5Pset_chunk (properties, 2, chunk_size); /* * Set parameters for SZIP compression; check the description of * the H5Pset_szip function in the HDF5 Reference Manual for more * information. */ szip_options_mask=H5_SZIP_NN_OPTION_MASK; szip_pixels_per_block=32; H5Pset_szip (properties, szip_options_mask, szip_pixels_per_block); /* * Create a new dataset within the file. The datatype * and data space describe the data on disk, which may * be different from the format used in the application's * memory. */ dataset32 = H5Dcreate (file, "datasetF32", H5T_NATIVE_FLOAT, data_space, properties); /* * Write the array to the file. The datatype and dataspace * describe the format of the data in the `buf' buffer. * The raw data is translated to the format required on disk, * as defined above. We use default raw data transfer properties. */ H5Dwrite (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); /* * Read the array. This is similar to writing data, * except the data flows in the opposite direction. * Note: Decompression is automatic. */ H5Dread (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r); H5Dclose (dataset32); H5Sclose (data_space); H5Pclose (properties); H5Fclose (file); }