changeset 404:f1b10507b0d7

fix compatibility with dcmtk < 3.6.4
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 05 Nov 2025 15:21:20 +0100
parents 330cd7f020e2
children 0b2e9ebf9b12
files Applications/Dicomizer.cpp
diffstat 1 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Dicomizer.cpp	Wed Nov 05 12:02:12 2025 +0100
+++ b/Applications/Dicomizer.cpp	Wed Nov 05 15:21:20 2025 +0100
@@ -526,17 +526,28 @@
     std::unique_ptr<DcmItem> item2(new DcmItem);
     OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_OpticalPathIdentifier, opticalPathId);
 
-    std::unique_ptr<DcmItem> item3(new DcmItem);
-    OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_FrameType, "DERIVED\\PRIMARY\\VOLUME\\NONE");
-
     std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence));
     std::unique_ptr<DcmSequenceOfItems> sequence2(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence));
-    std::unique_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_WholeSlideMicroscopyImageFrameTypeSequence));
+
+#if DCMTK_VERSION_NUMBER >= 364
+    {
+      std::unique_ptr<DcmItem> item3(new DcmItem);
+      OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_FrameType, "DERIVED\\PRIMARY\\VOLUME\\NONE");
+
+      std::unique_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_WholeSlideMicroscopyImageFrameTypeSequence));
+      if (!sequence3->insert(item3.release(), false, false).good() ||
+          !item->insert(sequence3.release(), false, false).good())
+      {
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
+      }
+    }
+#else
+    LOG(WARNING) << "Your version of DCMTK is too old to support the \""
+                 << OrthancWSI::DicomToolbox::GetTagName(DCM_WholeSlideMicroscopyImageFrameTypeSequence) << "\" DICOM tag";
+#endif
 
     if (!sequence2->insert(item2.release(), false, false).good() ||
-        !sequence3->insert(item3.release(), false, false).good() ||
         !item->insert(sequence2.release(), false, false).good() ||
-        !item->insert(sequence3.release(), false, false).good() ||
         !sequence->insert(item.release(), false, false).good() ||
         !dataset.insert(sequence.release(), true /* replace */, false).good())
     {