Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
1258:9c20ae049669 | 1259:69177b10e2b9 |
---|---|
656 minValue = 0; | 656 minValue = 0; |
657 maxValue = 0; | 657 maxValue = 0; |
658 } | 658 } |
659 } | 659 } |
660 | 660 |
661 void RadiographyScene::ExtractLayerFromRenderedScene(Orthanc::ImageAccessor& layer, | |
662 const Orthanc::ImageAccessor& renderedScene, | |
663 size_t layerIndex, | |
664 ImageInterpolation interpolation) | |
665 { | |
666 Extent2D sceneExtent = GetSceneExtent(); | |
667 | |
668 double pixelSpacingX = sceneExtent.GetWidth() / renderedScene.GetWidth(); | |
669 double pixelSpacingY = sceneExtent.GetHeight() / renderedScene.GetHeight(); | |
670 | |
671 AffineTransform2D view = AffineTransform2D::Combine( | |
672 AffineTransform2D::CreateScaling(1.0 / pixelSpacingX, 1.0 / pixelSpacingY), | |
673 AffineTransform2D::CreateOffset(-sceneExtent.GetX1(), -sceneExtent.GetY1())); | |
674 | |
675 AffineTransform2D layerToSceneTransform = AffineTransform2D::Combine( | |
676 view, | |
677 GetLayer(layerIndex).GetTransform()); | |
678 | |
679 AffineTransform2D sceneToLayerTransform = AffineTransform2D::Invert(layerToSceneTransform); | |
680 sceneToLayerTransform.Apply(layer, renderedScene, interpolation, false); | |
681 } | |
682 | |
661 Orthanc::Image* RadiographyScene::ExportToImage(double pixelSpacingX, | 683 Orthanc::Image* RadiographyScene::ExportToImage(double pixelSpacingX, |
662 double pixelSpacingY, | 684 double pixelSpacingY, |
663 ImageInterpolation interpolation, | 685 ImageInterpolation interpolation, |
664 bool invert, | 686 bool invert, |
665 int64_t maxValue /* for inversion */, | 687 int64_t maxValue /* for inversion */, |
688 AffineTransform2D view = AffineTransform2D::Combine( | 710 AffineTransform2D view = AffineTransform2D::Combine( |
689 AffineTransform2D::CreateScaling(1.0 / pixelSpacingX, 1.0 / pixelSpacingY), | 711 AffineTransform2D::CreateScaling(1.0 / pixelSpacingX, 1.0 / pixelSpacingY), |
690 AffineTransform2D::CreateOffset(-extent.GetX1(), -extent.GetY1())); | 712 AffineTransform2D::CreateOffset(-extent.GetX1(), -extent.GetY1())); |
691 | 713 |
692 // wipe background before rendering | 714 // wipe background before rendering |
693 Orthanc::ImageProcessing::Set(layers, 0); | 715 if (GetPreferredPhotomotricDisplayMode() == RadiographyPhotometricDisplayMode_Monochrome1) |
716 { | |
717 Orthanc::ImageProcessing::Set(layers, 65535.0f); | |
718 } | |
719 else | |
720 { | |
721 Orthanc::ImageProcessing::Set(layers, 0); | |
722 } | |
694 | 723 |
695 Render(layers, view, interpolation, applyWindowing); | 724 Render(layers, view, interpolation, applyWindowing); |
696 | 725 |
697 std::auto_ptr<Orthanc::Image> rendered(new Orthanc::Image(Orthanc::PixelFormat_Grayscale16, | 726 std::auto_ptr<Orthanc::Image> rendered(new Orthanc::Image(Orthanc::PixelFormat_Grayscale16, |
698 layers.GetWidth(), layers.GetHeight(), false)); | 727 layers.GetWidth(), layers.GetHeight(), false)); |