Mercurial > hg > orthanc-stone
diff Framework/Scene2D/GrayscaleStyleConfigurator.cpp @ 835:0965b665c653
windowing and linear interpolation in GrayscaleStyleConfigurator
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 31 May 2019 16:30:32 +0200 |
parents | aead999345e0 |
children | e62e7361fd60 |
line wrap: on
line diff
--- a/Framework/Scene2D/GrayscaleStyleConfigurator.cpp Fri May 31 15:21:50 2019 +0200 +++ b/Framework/Scene2D/GrayscaleStyleConfigurator.cpp Fri May 31 16:30:32 2019 +0200 @@ -21,12 +21,51 @@ #include "GrayscaleStyleConfigurator.h" +#include "FloatTextureSceneLayer.h" + #include <Core/OrthancException.h> namespace OrthancStone { - TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromImage(const Orthanc::ImageAccessor& image) const + void GrayscaleStyleConfigurator::SetLinearInterpolation(bool enabled) + { + linearInterpolation_ = enabled; + revision_++; + } + + TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromImage( + const Orthanc::ImageAccessor& image) const { throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); } + + TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromDicom( + const Orthanc::ImageAccessor& frame, + const DicomInstanceParameters& parameters) const + { + std::auto_ptr<TextureBaseSceneLayer> layer(parameters.CreateTexture(frame)); + + if (layer.get() == NULL || + layer->GetTexture().GetFormat() != Orthanc::PixelFormat_Float32) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat); + } + else + { + return layer.release(); + } + } + + + void GrayscaleStyleConfigurator::ApplyStyle(ISceneLayer& layer) const + { + FloatTextureSceneLayer& l = dynamic_cast<FloatTextureSceneLayer&>(layer); + + l.SetLinearInterpolation(linearInterpolation_); + + if (hasWindowing_) + { + l.SetWindowing(windowing_); + } + } }