void demoIO(char *filename) { char me[]="demoIO", newname[]="foo.nrrd", *err, *key, *val; int kvn, kvi; Nrrd *nin; /* create a nrrd; at this point this is just an empty container */ nin = nrrdNew(); /* read in the nrrd from file */ if (nrrdLoad(nin, filename, NULL)) { err = biffGetDone(NRRD); fprintf(stderr, "%s: trouble reading \"%s\":\n%s", me, filename, err); free(err); return; } /* say something about the array */ printf("%s: \"%s\" is a %d-dimensional nrrd of type %d (%s)\n", me, filename, nin->dim, nin->type, airEnumStr(nrrdType, nin->type)); printf("%s: the array contains %d elements, each %d bytes in size\n", me, (int)nrrdElementNumber(nin), (int)nrrdElementSize(nin)); /* print out the key/value pairs present */ kvn = nrrdKeyValueSize(nin); if (kvn) { for (kvi=0; kvi<kvn; kvi++) { nrrdKeyValueIndex(nin, &key, &val, kvi); printf("%s: key:value %d = %s:%s\n", me, kvi, key, val); free(key); free(val); key = val = NULL; } } /* modify key/value pairs, and write out the nrrd to a different file */ nrrdKeyValueClear(nin); nrrdKeyValueAdd(nin, "new key", "precious value"); if (nrrdSave(newname, nin, NULL)) { err = biffGetDone(NRRD); fprintf(stderr, "%s: trouble writing \"%s\":\n%s", me, newname, err); free(err); return; } /* blow away both the Nrrd struct *and* the memory at nin->data (nrrdNix() frees the struct but not the data, nrrdEmpty() frees the data but not the struct) */ nrrdNuke(nin); return; }
/* ** we try to use the oldest format that will hold the nrrd */ int _nrrdFormatNRRD_whichVersion(const Nrrd *nrrd, NrrdIoState *nio) { int ret; if (_nrrdFieldInteresting(nrrd, nio, nrrdField_measurement_frame)) { ret = 5; } else if (_nrrdFieldInteresting(nrrd, nio, nrrdField_thicknesses) || _nrrdFieldInteresting(nrrd, nio, nrrdField_space) || _nrrdFieldInteresting(nrrd, nio, nrrdField_space_dimension) || _nrrdFieldInteresting(nrrd, nio, nrrdField_sample_units) || airStrlen(nio->dataFNFormat) || nio->dataFNArr->len > 1) { ret = 4; } else if (_nrrdFieldInteresting(nrrd, nio, nrrdField_kinds)) { ret = 3; } else if (nrrdKeyValueSize(nrrd)) { ret = 2; } else { ret = 1; } return ret; }