diff Plugins/Engine/OrthancPlugins.cpp @ 1600:7151d63e6d81

documentation, primitives for jpeg
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 01 Sep 2015 12:11:53 +0200
parents dd1f9e81f891
children 905b4db3092b
line wrap: on
line diff
--- a/Plugins/Engine/OrthancPlugins.cpp	Tue Sep 01 11:23:41 2015 +0200
+++ b/Plugins/Engine/OrthancPlugins.cpp	Tue Sep 01 12:11:53 2015 +0200
@@ -678,47 +678,57 @@
 
   void OrthancPlugins::CompressAndAnswerPngImage(const void* parameters)
   {
+    // Bridge for backward compatibility with Orthanc <= 0.9.3
     const _OrthancPluginCompressAndAnswerPngImage& p = 
       *reinterpret_cast<const _OrthancPluginCompressAndAnswerPngImage*>(parameters);
 
+    _OrthancPluginCompressAndAnswerImage p2;
+    p2.output = p.output;
+    p2.imageFormat = OrthancPluginImageFormat_Png;
+    p2.pixelFormat = p.format;
+    p2.width = p.width;
+    p2.height = p.height;
+    p2.pitch = p.height;
+    p2.buffer = p.buffer;
+    p2.quality = 0;
+
+    CompressAndAnswerImage(&p2);
+  }
+
+
+  void OrthancPlugins::CompressAndAnswerImage(const void* parameters)
+  {
+    const _OrthancPluginCompressAndAnswerImage& p = 
+      *reinterpret_cast<const _OrthancPluginCompressAndAnswerImage*>(parameters);
+
     HttpOutput* translatedOutput = reinterpret_cast<HttpOutput*>(p.output);
 
-    PixelFormat format;
-    switch (p.format)
-    {
-      case OrthancPluginPixelFormat_Grayscale8:  
-        format = PixelFormat_Grayscale8;
-        break;
+    ImageAccessor accessor;
+    accessor.AssignReadOnly(Convert(p.pixelFormat), p.width, p.height, p.pitch, p.buffer);
 
-      case OrthancPluginPixelFormat_Grayscale16:  
-        format = PixelFormat_Grayscale16;
-        break;
+    std::string compressed;
 
-      case OrthancPluginPixelFormat_SignedGrayscale16:  
-        format = PixelFormat_SignedGrayscale16;
+    switch (p.imageFormat)
+    {
+      case OrthancPluginImageFormat_Png:
+      {
+        PngWriter writer;
+        writer.WriteToMemory(compressed, accessor);
+        translatedOutput->SetContentType("image/png");
         break;
+      }
 
-      case OrthancPluginPixelFormat_RGB24:  
-        format = PixelFormat_RGB24;
-        break;
-
-      case OrthancPluginPixelFormat_RGBA32:  
-        format = PixelFormat_RGBA32;
-        break;
+      case OrthancPluginImageFormat_Jpeg:
+      {
+        // TODO 
+        // quality
+      }
 
       default:
         throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
 
-    ImageAccessor accessor;
-    accessor.AssignReadOnly(format, p.width, p.height, p.pitch, p.buffer);
-
-    PngWriter writer;
-    std::string png;
-    writer.WriteToMemory(png, accessor);
-
-    translatedOutput->SetContentType("image/png");
-    translatedOutput->Answer(png);
+    translatedOutput->Answer(compressed);
   }
 
 
@@ -1163,6 +1173,10 @@
         CompressAndAnswerPngImage(parameters);
         return true;
 
+      case _OrthancPluginService_CompressAndAnswerImage:
+        CompressAndAnswerImage(parameters);
+        return true;
+
       case _OrthancPluginService_GetDicomForInstance:
         GetDicomForInstance(parameters);
         return true;