Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp @ 1919:ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 21 Mar 2022 15:50:29 +0100 |
parents | 898774b4e02d |
children | f4050908c6bc |
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Mon Mar 21 12:12:25 2022 +0100 +++ b/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Mon Mar 21 15:50:29 2022 +0100 @@ -569,8 +569,8 @@ } - TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture - (const Orthanc::ImageAccessor& pixelData) const + TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture( + const Orthanc::ImageAccessor& pixelData) const { // { // const Orthanc::ImageAccessor& source = pixelData; @@ -647,23 +647,49 @@ } - LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture - (const Orthanc::ImageAccessor& pixelData) const + LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture( + const Orthanc::ImageAccessor& pixelData) const { - std::unique_ptr<FloatTextureSceneLayer> texture; - + std::unique_ptr<LookupTableTextureSceneLayer> texture; + if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) { - return new LookupTableTextureSceneLayer(pixelData); + texture.reset(new LookupTableTextureSceneLayer(pixelData)); } else { std::unique_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); - return new LookupTableTextureSceneLayer(*converted); + texture.reset(new LookupTableTextureSceneLayer(*converted)); } + + if (HasPixelSpacing()) + { + texture->SetPixelSpacing(GetPixelSpacingX(), GetPixelSpacingY()); + } + + return texture.release(); } + LookupTableTextureSceneLayer* DicomInstanceParameters::CreateOverlayTexture( + int originX, + int originY, + const Orthanc::ImageAccessor& overlay) const + { + if (overlay.GetFormat() != Orthanc::PixelFormat_Grayscale8) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat); + } + + std::unique_ptr<LookupTableTextureSceneLayer> texture(CreateLookupTableTexture(overlay)); + + texture->SetOrigin(static_cast<double>(originX - 1) * texture->GetPixelSpacingX(), + static_cast<double>(originY - 1) * texture->GetPixelSpacingY()); + + return texture.release(); + } + + unsigned int DicomInstanceParameters::GetIndexInSeries() const { if (data_.hasIndexInSeries_)