Mercurial > hg > orthanc-stone
diff Framework/Radiography/RadiographyScene.cpp @ 1259:69177b10e2b9
various fixes for RadiographyScene: support text layers outside the dicom layer, fix background in this case + extract dicom from rendered scene
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 21 Jan 2020 16:52:37 +0100 |
parents | 9c20ae049669 |
children | 2d8ab34c8c91 a989c7d46b9a |
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyScene.cpp Tue Jan 14 15:22:10 2020 +0100 +++ b/Framework/Radiography/RadiographyScene.cpp Tue Jan 21 16:52:37 2020 +0100 @@ -658,6 +658,28 @@ } } + void RadiographyScene::ExtractLayerFromRenderedScene(Orthanc::ImageAccessor& layer, + const Orthanc::ImageAccessor& renderedScene, + size_t layerIndex, + ImageInterpolation interpolation) + { + Extent2D sceneExtent = GetSceneExtent(); + + double pixelSpacingX = sceneExtent.GetWidth() / renderedScene.GetWidth(); + double pixelSpacingY = sceneExtent.GetHeight() / renderedScene.GetHeight(); + + AffineTransform2D view = AffineTransform2D::Combine( + AffineTransform2D::CreateScaling(1.0 / pixelSpacingX, 1.0 / pixelSpacingY), + AffineTransform2D::CreateOffset(-sceneExtent.GetX1(), -sceneExtent.GetY1())); + + AffineTransform2D layerToSceneTransform = AffineTransform2D::Combine( + view, + GetLayer(layerIndex).GetTransform()); + + AffineTransform2D sceneToLayerTransform = AffineTransform2D::Invert(layerToSceneTransform); + sceneToLayerTransform.Apply(layer, renderedScene, interpolation, false); + } + Orthanc::Image* RadiographyScene::ExportToImage(double pixelSpacingX, double pixelSpacingY, ImageInterpolation interpolation, @@ -690,7 +712,14 @@ AffineTransform2D::CreateOffset(-extent.GetX1(), -extent.GetY1())); // wipe background before rendering - Orthanc::ImageProcessing::Set(layers, 0); + if (GetPreferredPhotomotricDisplayMode() == RadiographyPhotometricDisplayMode_Monochrome1) + { + Orthanc::ImageProcessing::Set(layers, 65535.0f); + } + else + { + Orthanc::ImageProcessing::Set(layers, 0); + } Render(layers, view, interpolation, applyWindowing);