int main(int argc, char **argv) { miclass_t myclass = MI_CLASS_REAL; mitype_t mytype = MI_TYPE_UNKNOWN; misize_t mysize = 0; char *myname = NULL; mihandle_t volume = NULL; /* Turn off automatic error reporting. */ H5Eset_auto2(H5E_DEFAULT, NULL, NULL); /* Check each file. */ while (--argc > 0) { ++argv; if (micreate_volume(*argv, 0, NULL, MI_TYPE_INT, 0, NULL, &volume) < 0) { /*type 0 is equivalent to H5T_INTEGER */ fprintf(stderr, "Error opening %s\n", *argv); } else { int i; /* Repeat many times to expose resource leakage problems, etc. */ for (i = 0; i < 25000; i++) { miget_data_type(volume, &mytype); miget_data_type_size(volume, &mysize); miget_data_class(volume, &myclass); miget_space_name(volume, &myname); mifree_name(myname); } miclose_volume(volume); printf("file: %s type %d size %lld class %d\n", *argv, mytype, mysize, myclass); } } return (0); }
void MINCResource::Load() { if (loaded) return; int result = miopen_volume(file.c_str(), MI2_OPEN_READ, &handle); if (result != MI_NOERROR) { logger.warning << "Error opening the MINC input file: " << file << logger.end; return; } // char** names = new char*[3]; // names[0] = "x_space"; // names[1] = "y_space"; // names[2] = "z_space"; // miset_apparent_dimension_order_by_name(handle, 3, names); int count; miget_volume_voxel_count(handle, &count); logger.info << "voxel count: " << count << logger.end; // atomic type of the resulting texture (float, int) miclass_t klass; miget_data_class(handle, &klass); logger.info << "data class: " << klass << logger.end; // data type of a voxel (float, uchar, ...) // convert this type into class type by scaling. mitype_t type; miget_data_type(handle, &type); logger.info << "voxel type: " << type << logger.end; misize_t vsize; miget_data_type_size(handle, &vsize); logger.info << "voxel size in bytes: " << vsize << logger.end; midimhandle_t dims[3]; result = miget_volume_dimensions(handle, MI_DIMCLASS_SPATIAL, MI_DIMATTR_ALL, MI_DIMORDER_FILE, 3, dims); if (result != 3) { logger.warning << "Only three spatial dimensions supported. Volume has " << result << logger.end; return; } w = h = d = 0; // hack: in our files dimensions are given in z,y,x order, so we reverse it. miget_dimension_size(dims[0], &w); miget_dimension_size(dims[1], &h); miget_dimension_size(dims[2], &d); // midimhandle_t* dims_app = new midimhandle_t[3]; // dims_app[0] = dims[2]; // dims_app[1] = dims[1]; // dims_app[2] = dims[0]; // miset_apparent_dimension_order (handle, 3, dims_app); logger.info << "dimensions: " << w << " x " << h << " x " << d << logger.end; // count records int recs = 0; miget_record_length(handle, &recs); logger.info << "record length: " << recs << logger.end; // count labels int lbls = 0; miget_number_of_defined_labels(handle, &lbls); logger.info << "# of labels: " << lbls << logger.end; // count attributes milisthandle_t lhandle; milist_start(handle, "", 0, &lhandle); char* path = new char[255]; char* name = new char[255]; while (milist_attr_next(handle, lhandle, path, 255, name, 255) == MI_NOERROR) { logger.info << "path: " << string(path) << " name: " << string(name) << logger.end; } milist_finish(lhandle); delete path; delete name; // char* nm; // miget_dimension_name(dims[2], &nm); // string hest(nm); // mifree_name(nm); // logger.info << "dimension name: " << hest << logger.end; char* space_name; miget_space_name(handle, &space_name); logger.info << "space name: " << string(space_name) << logger.end; mifree_name(space_name); loaded = true; }