DCMTK-dcmdata-数据编码/解码库
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DCMTK-dcmdata-数据编码/解码库相关的知识,希望对你有一定的参考价值。
DCMTK包含以下子包,子包位于其自己的子目录中:
dcmdata
一个数据编码/解码库和实用程序
该模块包含用于管理DICOM数据结构和文件的类。它还支持DICOM存储介质所需的DICOMDIR文件。
示例
- 加载一个DICOM文件并输出患者姓名
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;
- 创建一个DICOM数据集并存储到文件
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;
- 从多个文件创建通用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;
主要接口类:
DcmFileFormat
:
一个处理DICOM文件格式的类(包含元标头“meta header”)
常规函数:
virtual OFCondition DcmFileFormat::loadFile(
const OFFilename& fileName,
const E_TransferSyntax readXfer = EXS_Unknown,
const E_GrpLenEncoding groupLength = EGL_noChange,
const Uint32 maxReadLength = DCM_MaxReadLength,
const E_FileReadMode readMode = ERM_autoDetect
)
功能:从DICOM文件加载对象。
此方法支持存储为文件“file”(带元标头) 或 数据集“dataset”(无元标头的) 的DICOM对象。默认情况下,会自动检测元标头的存在。
filename
- 要加载的文件的名称(如果启用了支持,则可能包含宽字符)。因为OFFilename类有各种构造函数,所以“char*”、“OFString”或“wchar_t*”也可以直接传递给这个参数。
readXfer
- 用于读取数据的传输语法。枚举类型enum E_TransferSyntax
,默认值EXS_Unknown:内存中创建的未知传输语法或数据集,表示自动检测。枚举其他值:EXS_LittleEndianImplicit、EXS_BigEndianImplicit、EXS_LittleEndianExplicit、EXS_BigEndianExplicit、EXS_JPEGProcess1、…、EXS_MPEG2MainProfileAtMainLevel、…、EXS_MPEG4HighProfileLevel4_1、…、EXS_HEVCMainProfileLevel5_1、…。
groupLength
- 标志,指定如何处理组长度标记。枚举类型enum E_GrpLenEncoding
,默认值EGL_noChange:组长度值不变,警告:请勿将此值用于写入操作。枚举其他值:EGL_noChange、EGL_withoutGL、EGL_withGL、EGL_recalGL。
maxReadLength
- 元素值(element value)要读取的最大字节数。在检索到较大的元素值(使用getXXXX())或调用loadAllDataIntoMemory()之前,不会加载其值。默认值:DCM_MaxReadLength。
readMore
- 读取具有或不具有元标头的文件,即作为文件格式或数据集。使用ERM_fileOnly强制显示元标头。枚举类型enum E_FileReadMode
,默认值:ERM_autoDetect,其他枚举值:ERM_dataset、ERM_metaOnly、ERM_fileOnly。
返回值:
OFCondition:状态,如果成功返回EC_Normal,否则返回错误码。
DcmMetaInfo* DcmFileFormat::getMetaInfo()
get file meta information header part of the fileformat
**Returns**
reference to internally stored file meta information header
DcmDataset* DcmFileFormat::getDataset()
get dataset part of the fileformat
**Returns**
reference to internally stored dataset
OFCondition
:
条件代码的通用类。
此类的对象可以通过值有效地传递。为了做到这一点,尽可能不复制包含的字符串。
构造函数:
OFCondition::OFCondition( unsigned short aModule, unsigned short aCode, OFStatus aStatus, const char* aText )
功能:带文本的条件代码的构造函数。
aModule
- 模块标识符。0保留为全局代码,其他常量在别处定义。
aCode
- 每个模块唯一的状态代码
aStatus
- 条件状态枚举
aText
- 错误文本。
DcmItem
:
表示DICOM元素列表的类,其中每个元素具有不同的标签(tag),元素按标签的递增顺序进行维护。
特别是序列项(sequence item)。
DcmDataset
:
一个处理DICOM数据集格式的类(没有元标头的文件)
DcmElement
所有DICOM元素的抽象基类。
以上是关于DCMTK-dcmdata-数据编码/解码库的主要内容,如果未能解决你的问题,请参考以下文章