diff OrthancServer/Internals/DicomImageDecoder.h @ 1902:8b0ee8d5e6d0

Refactoring leading to speedups with custom image decoders
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 05 Jan 2016 13:26:51 +0100
parents b1291df2f780
children 554ec8422ec5
line wrap: on
line diff
--- a/OrthancServer/Internals/DicomImageDecoder.h	Mon Jan 04 14:20:41 2016 +0100
+++ b/OrthancServer/Internals/DicomImageDecoder.h	Tue Jan 05 13:26:51 2016 +0100
@@ -32,19 +32,23 @@
 
 #pragma once
 
-#include <memory>
+#include "../ParsedDicomFile.h"
 
-#include "../IDicomImageDecoder.h"
+#include <memory>
 
 class DcmDataset;
 
 namespace Orthanc
 {
-  class DicomImageDecoder : public IDicomImageDecoder
+  class DicomImageDecoder : public boost::noncopyable
   {
   private:
     class ImageSource;
 
+    DicomImageDecoder()   // This is a fully abstract class, no constructor
+    {
+    }
+
     static ImageAccessor* DecodeUncompressedImageInternal(DcmDataset& dataset,
                                                           unsigned int frame);
 
@@ -62,14 +66,26 @@
                                              unsigned int frame);
 #endif
 
-  public:
-    virtual ImageAccessor *Decode(ParsedDicomFile& dicom,
-                                  unsigned int frame);
-
     static bool TruncateDecodedImage(std::auto_ptr<ImageAccessor>& image,
                                      PixelFormat format,
                                      bool allowColorConversion);
 
     static bool PreviewDecodedImage(std::auto_ptr<ImageAccessor>& image);
+
+    static void ApplyExtractionMode(std::auto_ptr<ImageAccessor>& image,
+                                    ImageExtractionMode mode);
+
+  public:
+    static ImageAccessor *Decode(ParsedDicomFile& dicom,
+                                 unsigned int frame);
+
+    static void ExtractPngImage(std::string& result,
+                                std::auto_ptr<ImageAccessor>& image,
+                                ImageExtractionMode mode);
+
+    static void ExtractJpegImage(std::string& result,
+                                 std::auto_ptr<ImageAccessor>& image,
+                                 ImageExtractionMode mode,
+                                 uint8_t quality);
   };
 }