DCMTK-dcmdata-数据编码/解码库

Posted itzyjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DCMTK-dcmdata-数据编码/解码库相关的知识,希望对你有一定的参考价值。

DCMTK包含以下子包,子包位于其自己的子目录中:
dcmdata 一个数据编码/解码库和实用程序
该模块包含用于管理DICOM数据结构和文件的类。它还支持DICOM存储介质所需的DICOMDIR文件。

示例

  1. 加载一个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;
  1. 创建一个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;
  1. 从多个文件创建通用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-数据编码/解码库的主要内容,如果未能解决你的问题,请参考以下文章

DCMTK-dcmdata-数据编码/解码库

Python 标准库之 json 编码和解码器『详解』

Python 标准库之 json 编码和解码器『详解』

高级编码和解码技术

ActionScript2 Base64 编码/解码二进制数据

uicode编码解码