diff OrthancServer/FromDcmtkBridge.cpp @ 863:3c0d0836f704 jpeg

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 10 Jun 2014 17:20:33 +0200
parents a546b05a43da
children 2c545bb20dd3
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp	Sat Jun 07 10:51:28 2014 +0200
+++ b/OrthancServer/FromDcmtkBridge.cpp	Tue Jun 10 17:20:33 2014 +0200
@@ -527,21 +527,45 @@
                                         ImageExtractionMode mode)
   {
     // TODO CONTINUE THIS
-    if (mode == ImageExtractionMode_UInt8)
+
+    ImageBuffer tmp;
+    bool ok = false;
+
+    switch (mode)
     {
-      printf(">>>>>>>>\n");
-      ImageBuffer tmp;
-      if (DicomImageDecoder::Decode(tmp, dataset, frame, PixelFormat_Grayscale8, DicomImageDecoder::Mode_Truncate))
-      {
-        ImageAccessor accessor(tmp.GetAccessor());
-        PngWriter writer;
-        writer.WriteToMemory(result, accessor);
-        printf("<<<<<<<< OK\n");
-        return;
-      }
-      printf("<<<<<<<< FAILURE\n");
+      case ImageExtractionMode_UInt8:
+        ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_Grayscale8);
+        break;
+
+      case ImageExtractionMode_UInt16:
+        ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_Grayscale16);
+        break;
+
+      case ImageExtractionMode_Int16:
+        ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_SignedGrayscale16);
+        break;
+
+      case ImageExtractionMode_Preview:
+        ok = DicomImageDecoder::DecodePreview(tmp, dataset, frame);
+        break;
+
+      default:
+        throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
 
+    if (ok)
+    {
+      ImageAccessor accessor(tmp.GetAccessor());
+      PngWriter writer;
+      writer.WriteToMemory(result, accessor);
+      return;
+    }
+    else
+    {
+      throw OrthancException(ErrorCode_BadFileFormat);
+    }
+
+
     // See also: http://support.dcmtk.org/wiki/dcmtk/howto/accessing-compressed-data
 
     std::auto_ptr<DicomIntegerPixelAccessor> accessor;