diff OrthancServer/Internals/DicomImageDecoder.cpp @ 1824:b530c3dfe2a6

refactoring image decoding
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 25 Nov 2015 14:14:32 +0100
parents 96582230ddcb
children ac5b0b4e2434
line wrap: on
line diff
--- a/OrthancServer/Internals/DicomImageDecoder.cpp	Wed Nov 25 10:32:54 2015 +0100
+++ b/OrthancServer/Internals/DicomImageDecoder.cpp	Wed Nov 25 14:14:32 2015 +0100
@@ -87,6 +87,7 @@
 #include "../../Core/DicomFormat/DicomIntegerPixelAccessor.h"
 #include "../ToDcmtkBridge.h"
 #include "../FromDcmtkBridge.h"
+#include "../ParsedDicomFile.h"
 
 #include <boost/lexical_cast.hpp>
 
@@ -531,9 +532,11 @@
 
 
   bool DicomImageDecoder::Decode(ImageBuffer& target,
-                                 DcmDataset& dataset,
+                                 ParsedDicomFile& dicom,
                                  unsigned int frame)
   {
+    DcmDataset& dataset = *dicom.GetDcmtkObject().getDataset();
+
     if (IsUncompressedImage(dataset))
     {
       DecodeUncompressedImage(target, dataset, frame);
@@ -588,20 +591,11 @@
   }
 
 
-  bool DicomImageDecoder::DecodeAndTruncate(ImageBuffer& target,
-                                            DcmDataset& dataset,
-                                            unsigned int frame,
-                                            PixelFormat format,
-                                            bool allowColorConversion)
+  bool DicomImageDecoder::TruncateDecodedImage(ImageBuffer& target,
+                                               ImageBuffer& source,
+                                               PixelFormat format,
+                                               bool allowColorConversion)
   {
-    // TODO Special case for uncompressed images
-    
-    ImageBuffer source;
-    if (!Decode(source, dataset, frame))
-    {
-      return false;
-    }
-
     // If specified, prevent the conversion between color and
     // grayscale images
     bool isSourceColor = IsColorImage(source.GetFormat());
@@ -634,18 +628,9 @@
   }
 
 
-  bool DicomImageDecoder::DecodePreview(ImageBuffer& target,
-                                        DcmDataset& dataset,
-                                        unsigned int frame)
+  bool DicomImageDecoder::PreviewDecodedImage(ImageBuffer& target,
+                                              ImageBuffer& source)
   {
-    // TODO Special case for uncompressed images
-    
-    ImageBuffer source;
-    if (!Decode(source, dataset, frame))
-    {
-      return false;
-    }
-
     switch (source.GetFormat())
     {
       case PixelFormat_RGB24: