Mercurial > hg > orthanc-stone
diff Framework/Toolbox/DicomInstanceParameters.cpp @ 768:55411e7da2f7
LookupTableTextureSceneLayer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 23 May 2019 20:04:33 +0200 |
parents | 26f4345e771e |
children | 32eaf4929b08 |
line wrap: on
line diff
--- a/Framework/Toolbox/DicomInstanceParameters.cpp Thu May 23 16:57:33 2019 +0200 +++ b/Framework/Toolbox/DicomInstanceParameters.cpp Thu May 23 20:04:33 2019 +0200 @@ -320,7 +320,24 @@ } - TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture(const Orthanc::ImageAccessor& pixelData) const + Orthanc::ImageAccessor* DicomInstanceParameters::ConvertToFloat(const Orthanc::ImageAccessor& pixelData) const + { + std::auto_ptr<Orthanc::Image> converted(new Orthanc::Image(Orthanc::PixelFormat_Float32, + pixelData.GetWidth(), + pixelData.GetHeight(), + false)); + Orthanc::ImageProcessing::Convert(*converted, pixelData); + + // Correct rescale slope/intercept if need be + data_.ApplyRescale(*converted, (pixelData.GetFormat() == Orthanc::PixelFormat_Grayscale32)); + + return converted.release(); + } + + + + TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture + (const Orthanc::ImageAccessor& pixelData) const { assert(sizeof(float) == 4); @@ -338,26 +355,16 @@ } else { - if (sourceFormat != Orthanc::PixelFormat_Grayscale16 && - sourceFormat != Orthanc::PixelFormat_Grayscale32 && - sourceFormat != Orthanc::PixelFormat_SignedGrayscale16) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } + // This is the case of a grayscale frame. Convert it to Float32. + std::auto_ptr<FloatTextureSceneLayer> texture; - std::auto_ptr<FloatTextureSceneLayer> texture; - + if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) { - // This is the case of a grayscale frame. Convert it to Float32. - std::auto_ptr<Orthanc::Image> converted(new Orthanc::Image(Orthanc::PixelFormat_Float32, - pixelData.GetWidth(), - pixelData.GetHeight(), - false)); - Orthanc::ImageProcessing::Convert(*converted, pixelData); - - // Correct rescale slope/intercept if need be - data_.ApplyRescale(*converted, (sourceFormat == Orthanc::PixelFormat_Grayscale32)); - + texture.reset(new FloatTextureSceneLayer(pixelData)); + } + else + { + std::auto_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); texture.reset(new FloatTextureSceneLayer(*converted)); } @@ -370,4 +377,21 @@ return texture.release(); } } + + + LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture + (const Orthanc::ImageAccessor& pixelData) const + { + std::auto_ptr<FloatTextureSceneLayer> texture; + + if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) + { + return new LookupTableTextureSceneLayer(pixelData); + } + else + { + std::auto_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); + return new LookupTableTextureSceneLayer(*converted); + } + } }