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:
Here are some further classes that are of interest:
Tools
This module contains the following command line tools:
- cda2dcm: Encapsulate CDA file into DICOM file format
- dcm2cda: Extract CDA file from DICOM encapsulated CDA
- dcm2json: Convert DICOM file and data set to JSON
- dcm2pdf: Extract PDF file from DICOM encapsulated PDF
- dcm2xml: Convert DICOM file and data set to XML
- dcmconv: Convert DICOM file encoding
- dcmcrle: Encode DICOM file to RLE transfer syntax
- dcmdecap: Extract encapsulated file from DICOM encapsulated storage object
- dcmdrle: Decode RLE-compressed DICOM file
- dcmdump: Dump DICOM file and data set
- dcmencap: Encapsulate document into DICOM format
- dcmftest: Test if file uses DICOM part 10 format
- dcmgpdir: Create a general purpose DICOMDIR
- dcmodify: Modify DICOM files
- dump2dcm: Convert ASCII dump to DICOM file
- img2dcm: Convert standard image formats into DICOM format
- json2dcm: Convert JSON document to DICOM file or data set
- pdf2dcm: Encapsulate PDF file into DICOM file format
- stl2dcm: Encapsulate STL file into DICOM file format
- xml2dcm: Convert XML document to DICOM file or data set
Files
The following file provides further documentation:
Examples
The following example shows how to load a DICOM file and output the patient's name:
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;
The following example shows how to create a DICOM dataset and save it to a file:
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;
The following example shows how to create a general purpose DICOMDIR from multiple files:
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;