Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp @ 1642:5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 10 Nov 2020 17:21:23 +0100 |
parents | 5cdc5b98f14d |
children | 4e14735e98f8 |
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Tue Nov 10 16:58:27 2020 +0100 +++ b/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Tue Nov 10 17:21:23 2020 +0100 @@ -68,8 +68,7 @@ } - DicomInstanceParameters::Data::Data(const Orthanc::DicomMap& dicom) : - imageInformation_(dicom) + DicomInstanceParameters::Data::Data(const Orthanc::DicomMap& dicom) { if (!dicom.LookupStringValue(studyInstanceUid_, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) || !dicom.LookupStringValue(seriesInstanceUid_, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false) || @@ -206,6 +205,25 @@ } + const Orthanc::DicomImageInformation& DicomInstanceParameters::GetImageInformation() const + { + assert(tags_.get() != NULL); + + if (imageInformation_.get() == NULL) + { + const_cast<DicomInstanceParameters&>(*this).imageInformation_. + reset(new Orthanc::DicomImageInformation(GetTags())); + + assert(imageInformation_->GetWidth() == GetWidth()); + assert(imageInformation_->GetHeight() == GetHeight()); + assert(imageInformation_->GetNumberOfFrames() == GetNumberOfFrames()); + } + + assert(imageInformation_.get() != NULL); + return *imageInformation_; + } + + CoordinateSystem3D DicomInstanceParameters::GetFrameGeometry(unsigned int frame) const { if (frame >= data_.numberOfFrames_) @@ -253,7 +271,7 @@ bool DicomInstanceParameters::IsColor() const { Orthanc::PhotometricInterpretation photometric = - data_.imageInformation_.GetPhotometricInterpretation(); + GetImageInformation().GetPhotometricInterpretation(); return (photometric != Orthanc::PhotometricInterpretation_Monochrome1 && photometric != Orthanc::PhotometricInterpretation_Monochrome2); @@ -465,7 +483,7 @@ data_.defaultWindowingWidth_); } - switch (data_.imageInformation_.GetPhotometricInterpretation()) + switch (GetImageInformation().GetPhotometricInterpretation()) { case Orthanc::PhotometricInterpretation_Monochrome1: texture->SetInverted(true);