diff Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 2030:f36de3ba43c8

added button "Stretch to whole range" in the "Change windowing" menu
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 23 Dec 2022 17:30:12 +0100
parents 6099c7925202
children a56f7ed0cdf9 07964689cb0b
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Tue Dec 20 08:51:43 2022 +0100
+++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Fri Dec 23 17:30:12 2022 +0100
@@ -3094,6 +3094,34 @@
     }
   }
 
+  void StretchWindowing()
+  {
+    float minValue, maxValue;
+    
+    {
+      std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock());
+
+      if (!lock->GetController().GetScene().HasLayer(LAYER_TEXTURE) ||
+          lock->GetController().GetScene().GetLayer(LAYER_TEXTURE).GetType() !=
+          OrthancStone::ISceneLayer::Type_FloatTexture)
+      {
+        return;
+      }
+
+      const Orthanc::ImageAccessor& texture =
+        dynamic_cast<OrthancStone::FloatTextureSceneLayer&>(
+          lock->GetController().GetScene().GetLayer(LAYER_TEXTURE)).GetTexture();
+      if (texture.GetFormat() != Orthanc::PixelFormat_Float32)
+      {
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
+      }
+
+      Orthanc::ImageProcessing::GetMinMaxFloatValue(minValue, maxValue, texture);
+    }
+
+    SetWindowing((minValue + maxValue) / 2.0f, maxValue - minValue);
+  }
+
   void FlipX()
   {
     {
@@ -4271,6 +4299,17 @@
 
 
   EMSCRIPTEN_KEEPALIVE
+  void StretchWindowing(const char* canvas)
+  {
+    try
+    {
+      GetViewport(canvas)->StretchWindowing();
+    }
+    EXTERN_CATCH_EXCEPTIONS;
+  }
+
+
+  EMSCRIPTEN_KEEPALIVE
   void InvertContrast(const char* canvas)
   {
     try