diff --git a/src/src/Common/SeriesImageSet.h b/src/src/Common/SeriesImageSet.h index 1c495f9..89de8b8 100644 --- a/src/src/Common/SeriesImageSet.h +++ b/src/src/Common/SeriesImageSet.h @@ -30,6 +30,15 @@ public: { return m_image; }; + //image data + vtkImageData* GetOverlayData() + { + return m_OverlayImage; + }; + void SetOverlayData(vtkImageData* img) + { + m_OverlayImage = img; + }; //Image Properties ExtendMedicalImageProperties* GetProperty() { @@ -39,6 +48,7 @@ public: bool IntersectWorldBounds(SeriesImageSet* imageSet); private: vtkSmartPointer m_image; + vtkSmartPointer m_OverlayImage; ExtendMedicalImageProperties* m_property = nullptr; std::string m_pUniqueID; }; diff --git a/src/src/IO/DICOM/DicomLoader.cpp b/src/src/IO/DICOM/DicomLoader.cpp index aac99a4..2ea83c4 100644 --- a/src/src/IO/DICOM/DicomLoader.cpp +++ b/src/src/IO/DICOM/DicomLoader.cpp @@ -136,6 +136,9 @@ SeriesImageSet* DicomLoader::getSeriesImageSet(const std::string& uniqueID)//, D reader->Update(); auto imageData = reader->GetOutput(); SeriesImageSet* result = new SeriesImageSet((*iter),imageData); + if (reader->GetHasOverlay()){ + result->SetOverlayData(reader->GetOutputOverLayData()); + } // imageData->Register(placeHolder); reader->Delete(); reader = nullptr; diff --git a/src/src/IO/DICOM/QDicomUtility.cpp b/src/src/IO/DICOM/QDicomUtility.cpp index f2fb406..ede4b24 100644 --- a/src/src/IO/DICOM/QDicomUtility.cpp +++ b/src/src/IO/DICOM/QDicomUtility.cpp @@ -30,8 +30,10 @@ QPixmap DicomUtil::GetThumbnail(ExtendMedicalImageProperties *property) { //将原始传输语法输入DicomImage编译类库自我解压压缩的图像 DicomImage dcmImage(fileFormat, dset->getOriginalXfer(), CIF_MayDetachPixelData); unsigned long w = 100; + bool flag = dcmImage.getWidth() > dcmImage.getHeight(); DicomImage *sdcmImage = dcmImage.createScaledImage(w, 0, 0, 1); + sdcmImage->setWindow(wl, ww); if (sample == 1) { uchar *data = (uchar *) sdcmImage->getOutputData(8);//按8位的位宽取数据 diff --git a/src/src/Rendering/Viewer/DICOMImageViewer.cxx b/src/src/Rendering/Viewer/DICOMImageViewer.cxx index 51cd6e9..d7c3143 100644 --- a/src/src/Rendering/Viewer/DICOMImageViewer.cxx +++ b/src/src/Rendering/Viewer/DICOMImageViewer.cxx @@ -254,6 +254,29 @@ void DICOMImageViewer::SetInputConnection(vtkAlgorithmOutput *input) { this->RemoveFusionData(); } +void DICOMImageViewer::SetOverlayInputData(vtkImageData *in) { + auto OverlayMapper = vtkImageSliceMapper::New(); + OverlayMapper->SliceAtFocalPointOn(); + OverlayMapper->SliceFacesCameraOn(); + OverlayMapper->SetInputData(in); + auto OverlayActor = vtkImageSlice::New(); + vtkNew table; + table->SetNumberOfTableValues(1); + table->SetRange(245.5,255.5); + table->SetAboveRangeColor(.0, .0, .0, .0); + table->SetBelowRangeColor(.0, .0, .0, .0); + table->SetUseAboveRangeColor(1); + table->SetUseBelowRangeColor(1); + table->SetTableValue(0,0.8,0.8,0.5); + table->Build(); + OverlayActor->SetMapper(OverlayMapper); + OverlayActor->GetProperty()->SetLayerNumber(2); + OverlayActor->GetProperty()->SetLookupTable(table); + OverlayActor->GetProperty()->SetUseLookupTableScalarRange(1); + this->ImageStack->AddImage(OverlayActor); + +} + vtkTypeBool DICOMImageViewer::GetOffScreenRendering() { return this->RenderWindow->GetOffScreenRendering(); } @@ -1223,6 +1246,7 @@ void DICOMImageViewer::SetReconPlane(int plane) { SetSlice(0); } + int DICOMImageViewer::GetReconPlane() { if (SlicePlane>=0) return SlicePlane; double projVector[4] = {.0, .0, .0, 1.0}; @@ -1233,7 +1257,6 @@ int DICOMImageViewer::GetReconPlane() { return ::projToPlane(ret); } - void DICOMImageViewer::UpdateReconPlane() { // Set the camera position vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : nullptr; diff --git a/src/src/Rendering/Viewer/DICOMImageViewer.h b/src/src/Rendering/Viewer/DICOMImageViewer.h index 6aaa061..843bdbf 100644 --- a/src/src/Rendering/Viewer/DICOMImageViewer.h +++ b/src/src/Rendering/Viewer/DICOMImageViewer.h @@ -105,6 +105,8 @@ public: //@} + void SetOverlayInputData(vtkImageData *in); + /** * Set/get the slice orientation */ diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 303f139..24e35f5 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -155,6 +155,10 @@ void DicomImageView::loadSeries(SeriesImageSet *series) { .arg(time) .arg(series->GetProperty()->GetSeriesDescription())); mImageViewer->SetInputData(mSeries->GetData()); + if(mSeries->GetOverlayData()) + { + mImageViewer->SetOverlayInputData(mSeries->GetOverlayData()); + } mImageViewer->SetCoordsTransformMatrix(series->GetProperty()); mImageViewer->InitCornerInfo(series->GetProperty()); mImageViewer->SetupImageViewer();