Simple overlay render logic(need memory manage logic).
This commit is contained in:
@@ -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 <vtkImageData> m_image;
|
||||
vtkSmartPointer <vtkImageData> m_OverlayImage;
|
||||
ExtendMedicalImageProperties* m_property = nullptr;
|
||||
std::string m_pUniqueID;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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位的位宽取数据
|
||||
|
||||
@@ -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<vtkLookupTable> 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;
|
||||
|
||||
@@ -105,6 +105,8 @@ public:
|
||||
|
||||
//@}
|
||||
|
||||
void SetOverlayInputData(vtkImageData *in);
|
||||
|
||||
/**
|
||||
* Set/get the slice orientation
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user