本帖最后由 medimage 于 2015-12-4 21:22 编辑
三、dcmdata程序库
-dcmdata:一个数据编码/解码库和可用的工具 这个模块包含了一些类来管理Dicom数据结构和文件。同时它也提供了对DICOMDIR文件的支持以满足Dicom storage media(存储介质)的需要。 ---------------------------------------------------- 主要的接口类有: --DcmFileFormat:a class handling the DICOM file format (with meta header) 。头文件在dcfilefo.h。***详情在单独的文档中分析*** --DcmDataset:a class handling the DICOM dataset format (files without meta header) 。头文件在dcdatset.h。***详情在单独的文档中分析*** --DcmItem:a class representing a collection of DICOM elements。头文件在dcitem.h。***详情在单独的文档中分析*** --DcmElement:abstract base class for all DICOM elements。头文件在dcelem.h。***详情在单独的文档中分析***。它的派生类包括:DcmAttributeTag\DcmByteString\DcmFloatingPointDouble\DcmFloatingPointSingle\DcmOtherByteOtherWord\DcmSequenceOfItems\DcmSignedLong\DcmSignedShort\DcmUnsignedLong\DcmUnsignedShort ---------------------------------------------------- ---------------------------------------------------- 工具:这个模块包含了下面的命令行工具: dcm2xml: Convert DICOM file and data set to XML dcmconv: Convert DICOM file encoding dcmcrle: Encode DICOM file to RLE transfer syntax dcmdrle: Decode RLE-compressed DICOM file dcmdump: Dump DICOM file and data set 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 xml2dcm: Convert XML document to DICOM file or data set ***暂时不对命令行工具进行详细的分析*** ---------------------------------------------------- --------------------------------------------------- 举例: --调入一个DICOM文件,输出病人姓名 DcmFileFormat fileformat; OFCondition status = fileformat.loadFile("test.dcm"); if (status.good()) { OFString patientsName; if (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good()) { cout << "Patient's Name: " << patientsName << endl; } else cerr << "Error: cannot access Patient's Name!" << endl; } else cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl; --创建一个DICOM dataset数据集,并保存为文件 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_PatientsName, "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; --如何为多个文件创建一般目的的DICOMDIR 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; ------------------------------------------------------------
|