comparison 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
comparison
equal deleted inserted replaced
1918:fc6009c43bd9 1919:ed4831e08961
567 567
568 return converted.release(); 568 return converted.release();
569 } 569 }
570 570
571 571
572 TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture 572 TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture(
573 (const Orthanc::ImageAccessor& pixelData) const 573 const Orthanc::ImageAccessor& pixelData) const
574 { 574 {
575 // { 575 // {
576 // const Orthanc::ImageAccessor& source = pixelData; 576 // const Orthanc::ImageAccessor& source = pixelData;
577 // const void* sourceBuffer = source.GetConstBuffer(); 577 // const void* sourceBuffer = source.GetConstBuffer();
578 // intptr_t sourceBufferInt = reinterpret_cast<intptr_t>(sourceBuffer); 578 // intptr_t sourceBufferInt = reinterpret_cast<intptr_t>(sourceBuffer);
645 645
646 return texture.release(); 646 return texture.release();
647 } 647 }
648 648
649 649
650 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture 650 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture(
651 (const Orthanc::ImageAccessor& pixelData) const 651 const Orthanc::ImageAccessor& pixelData) const
652 { 652 {
653 std::unique_ptr<FloatTextureSceneLayer> texture; 653 std::unique_ptr<LookupTableTextureSceneLayer> texture;
654 654
655 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) 655 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32)
656 { 656 {
657 return new LookupTableTextureSceneLayer(pixelData); 657 texture.reset(new LookupTableTextureSceneLayer(pixelData));
658 } 658 }
659 else 659 else
660 { 660 {
661 std::unique_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); 661 std::unique_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData));
662 return new LookupTableTextureSceneLayer(*converted); 662 texture.reset(new LookupTableTextureSceneLayer(*converted));
663 } 663 }
664
665 if (HasPixelSpacing())
666 {
667 texture->SetPixelSpacing(GetPixelSpacingX(), GetPixelSpacingY());
668 }
669
670 return texture.release();
664 } 671 }
665 672
666 673
674 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateOverlayTexture(
675 int originX,
676 int originY,
677 const Orthanc::ImageAccessor& overlay) const
678 {
679 if (overlay.GetFormat() != Orthanc::PixelFormat_Grayscale8)
680 {
681 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat);
682 }
683
684 std::unique_ptr<LookupTableTextureSceneLayer> texture(CreateLookupTableTexture(overlay));
685
686 texture->SetOrigin(static_cast<double>(originX - 1) * texture->GetPixelSpacingX(),
687 static_cast<double>(originY - 1) * texture->GetPixelSpacingY());
688
689 return texture.release();
690 }
691
692
667 unsigned int DicomInstanceParameters::GetIndexInSeries() const 693 unsigned int DicomInstanceParameters::GetIndexInSeries() const
668 { 694 {
669 if (data_.hasIndexInSeries_) 695 if (data_.hasIndexInSeries_)
670 { 696 {
671 return data_.indexInSeries_; 697 return data_.indexInSeries_;