diff OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1824:b530c3dfe2a6

refactoring image decoding
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 25 Nov 2015 14:14:32 +0100
parents 2dbf25006f88
children ac5b0b4e2434
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestResources.cpp	Wed Nov 25 10:32:54 2015 +0100
+++ b/OrthancServer/OrthancRestApi/OrthancRestResources.cpp	Wed Nov 25 14:14:32 2015 +0100
@@ -39,6 +39,7 @@
 #include "../FromDcmtkBridge.h"
 #include "../ServerContext.h"
 #include "../SliceOrdering.h"
+#include "../Internals/DicomImageDecoder.h"
 
 
 namespace Orthanc
@@ -265,6 +266,7 @@
     class ImageToEncode
     {
     private:
+      IDicomImageDecoder& decoder_;
       std::string         format_;
       std::string         encoded_;
       ParsedDicomFile&    dicom_;
@@ -272,9 +274,11 @@
       ImageExtractionMode mode_;
 
     public:
-      ImageToEncode(ParsedDicomFile& dicom,
+      ImageToEncode(IDicomImageDecoder& decoder,
+                    ParsedDicomFile& dicom,
                     unsigned int frame,
                     ImageExtractionMode mode) : 
+        decoder_(decoder),
         dicom_(dicom),
         frame_(frame),
         mode_(mode)
@@ -310,6 +314,11 @@
       {
         output.AnswerBuffer(encoded_, format_);
       }
+
+      IDicomImageDecoder& GetDecoder() const
+      {
+        return decoder_;
+      }
     };
 
     class EncodePng : public HttpContentNegociation::IHandler
@@ -327,7 +336,8 @@
       {
         assert(type == "image");
         assert(subtype == "png");
-        image_.GetDicom().ExtractPngImage(image_.GetTarget(), image_.GetFrame(), image_.GetMode());
+        image_.GetDicom().ExtractPngImage(image_.GetTarget(), image_.GetDecoder(), 
+                                          image_.GetFrame(), image_.GetMode());
         image_.SetFormat("image/png");
       }
     };
@@ -367,7 +377,8 @@
       {
         assert(type == "image");
         assert(subtype == "jpeg");
-        image_.GetDicom().ExtractJpegImage(image_.GetTarget(), image_.GetFrame(), image_.GetMode(), quality_);
+        image_.GetDicom().ExtractJpegImage(image_.GetTarget(), image_.GetDecoder(), 
+                                           image_.GetFrame(), image_.GetMode(), quality_);
         image_.SetFormat("image/jpeg");
       }
     };
@@ -399,7 +410,8 @@
 
     try
     {
-      ImageToEncode image(dicom, frame, mode);
+      DicomImageDecoder decoder;  // TODO plugins
+      ImageToEncode image(decoder, dicom, frame, mode);
 
       HttpContentNegociation negociation;
       EncodePng png(image);          negociation.Register("image/png", png);
@@ -453,7 +465,8 @@
 
     ParsedDicomFile dicom(dicomContent);
     ImageBuffer buffer;
-    dicom.ExtractImage(buffer, frame);
+    DicomImageDecoder decoder;  // TODO plugin
+    dicom.ExtractImage(buffer, decoder, frame);
 
     ImageAccessor accessor(buffer.GetConstAccessor());