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);