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));