Mercurial > hg > orthanc-stone
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