Mercurial > hg > orthanc
diff OrthancFramework/Sources/DicomFormat/DicomStreamReader.cpp @ 5324:e95caa87fed8
only store PixelDataVR metadata if needed
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sun, 25 Jun 2023 15:19:25 +0200 |
parents | 03501a258d9e |
children | 48b8dae6dc77 |
line wrap: on
line diff
--- a/OrthancFramework/Sources/DicomFormat/DicomStreamReader.cpp Sun Jun 25 12:29:39 2023 +0200 +++ b/OrthancFramework/Sources/DicomFormat/DicomStreamReader.cpp Sun Jun 25 15:19:25 2023 +0200 @@ -582,12 +582,14 @@ bool hasPixelData_; uint64_t pixelDataOffset_; ValueRepresentation pixelDataVR_; + DicomTransferSyntax transferSyntax_; public: PixelDataVisitor() : hasPixelData_(false), pixelDataOffset_(0), - pixelDataVR_(ValueRepresentation_Unknown) + pixelDataVR_(ValueRepresentation_Unknown), + transferSyntax_(DicomTransferSyntax_LittleEndianImplicit) // Default DICOM transfer syntax { } @@ -599,6 +601,7 @@ virtual void VisitTransferSyntax(DicomTransferSyntax transferSyntax) ORTHANC_OVERRIDE { + transferSyntax_ = transferSyntax; } virtual bool VisitDatasetTag(const DicomTag& tag, @@ -611,7 +614,23 @@ { hasPixelData_ = true; pixelDataOffset_ = fileOffset; - pixelDataVR_ = vr; + + if (transferSyntax_ == DicomTransferSyntax_LittleEndianImplicit) + { + // Implicit Little Endian has always "OW" VR for pixel data + // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/chapter_A.html + pixelDataVR_ = ValueRepresentation_OtherWord; + } + else if (transferSyntax_ == DicomTransferSyntax_LittleEndianExplicit || + transferSyntax_ == DicomTransferSyntax_BigEndianExplicit) + { + pixelDataVR_ = vr; + } + else + { + // Compressed transfer syntaxes must always be OB + pixelDataVR_ = ValueRepresentation_OtherByte; + } } // Stop processing once pixel data has been passed