talk is cheap show me the code —— Linus Torvalds
本章将结合开源项目IMBRA讲解如何解析一个DCM文件
dcm文件结构.jpg
文件开头会有128字节的导言,这部分数据没有内容。接着是4字节DICOM文件标识,存储这"DICM"。然后紧接着就是dicom数据数据元素了
打开一个DCM文件.jpg
try
{
pStream->read(oldDicomSignature, 8);
}
catch(StreamEOFError&)
{
IMEBRA_THROW(CodecWrongFormatError, "detected a wrong format");
}
// Skip the first 128 bytes (8 already skipped)
///
pStream->seekForward(120);
// Read the DICOM signature (DICM)
///
std::uint8_t dicomSignature[4];
pStream->read(dicomSignature, 4);
// Check the DICM signature
///
const char* checkSignature="DICM";
if(::memcmp(dicomSignature, checkSignature, 4) != 0)
{
bFailed=true;
}
旧版本的DCM文件会在开头8个字节验证签名,在读完128字节后,读取4个字节验证DICOM标识。
pStream->read((std::uint8_t*)&tagId, sizeof(tagId));