上篇文章讲解了dcmtk读取元素方式,但有局限性,只满足如下情况:
- 除PixelData外的元素
- 非压缩的PixelData
如果dicom图像是压缩格式,则string pixelData = dcmParse.GetElementValue(DCM_PixelData);会报错,需要先将PixelData解压再读取。
dcmtk提供两种开源解压模块,每种模块均支持无损压缩和有损压缩。
dcmjpeg是jpeg压缩格式的图像编解码器,dcmjpls是jpeg-ls压缩格式的图像编解码器。
DJDecoderRegistration是dcmjpeg模块的解压注册类
DJLSDecoderRegistration是jpeg-ls模块的解压注册类
DcmRLEDecoderRegistration是dcmdata模块的解压注册类
void DcmParse::UnCompress(string filename)
{
string transferSyntax = GetElementValue(DCM_TransferSyntaxUID);
if (transferSyntax == UID_LittleEndianImplicitTransferSyntax ||
transferSyntax == UID_LittleEndianExplicitTransferSyntax ||
transferSyntax == UID_BigEndianExplicitTransferSyntax)
return;