/*! \page mod_dcmdata dcmdata: a data encoding/decoding library and utility apps This module contains classes to manage DICOM data structures and files. It also provides support for DICOMDIR files as required for DICOM storage media. The main interface classes are: \li \b DcmFileFormat \li \b DcmDataset \li \b DcmItem \li \b DcmElement Here are some further classes that are of interest: \li \b DcmTag \li \b DcmTagKey \li \b DicomDirInterface \section Tools This module contains the following command line tools: \li \ref cda2dcm \li \ref dcm2json \li \ref dcm2pdf \li \ref dcm2xml \li \ref dcmconv \li \ref dcmcrle \li \ref dcmdrle \li \ref dcmdump \li \ref dcmftest \li \ref dcmgpdir \li \ref dcmodify \li \ref dump2dcm \li \ref img2dcm \li \ref pdf2dcm \li \ref stl2dcm \li \ref xml2dcm \section Files The following file provides further documentation: \li \ref file_datadict \section Examples The following example shows how to load a DICOM file and output the patient's name: \code DcmFileFormat fileformat; OFCondition status = fileformat.loadFile("test.dcm"); if (status.good()) { OFString patientName; if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()) { cout << "Patient's Name: " << patientName << endl; } else cerr << "Error: cannot access Patient's Name!" << endl; } else cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl; \endcode The following example shows how to create a DICOM dataset and save it to a file: \code char uid[100]; DcmFileFormat fileformat; DcmDataset *dataset = fileformat.getDataset(); dataset->putAndInsertString(DCM_SOPClassUID, UID_SecondaryCaptureImageStorage); dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT)); dataset->putAndInsertString(DCM_PatientName, "Doe^John"); /* ... */ dataset->putAndInsertUint8Array(DCM_PixelData, pixelData, pixelLength); OFCondition status = fileformat.saveFile("test.dcm", EXS_LittleEndianExplicit); if (status.bad()) cerr << "Error: cannot write DICOM file (" << status.text() << ")" << endl; \endcode The following example shows how to create a general purpose DICOMDIR from multiple files: \code DicomDirInterface dicomdir; OFCondition status = dicomdir.createNewDicomDir(); if (status.good()) { while ( /* there are files */ ) dicomdir.addDicomFile( /* current filename */ ); status = dicomdir.writeDicomDir(); if (status.bad()) cerr << "Error: cannot write DICOMDIR (" << status.text() << ")" << endl; } else cerr << "Error: cannot create DICOMDIR (" << status.text() << ")" << endl; \endcode */ /*! \page file_datadict datadict.txt file \verbinclude datadict.txt */