Simple overlay render logic(need memory manage logic).
This commit is contained in:
@@ -30,6 +30,15 @@ public:
|
|||||||
{
|
{
|
||||||
return m_image;
|
return m_image;
|
||||||
};
|
};
|
||||||
|
//image data
|
||||||
|
vtkImageData* GetOverlayData()
|
||||||
|
{
|
||||||
|
return m_OverlayImage;
|
||||||
|
};
|
||||||
|
void SetOverlayData(vtkImageData* img)
|
||||||
|
{
|
||||||
|
m_OverlayImage = img;
|
||||||
|
};
|
||||||
//Image Properties
|
//Image Properties
|
||||||
ExtendMedicalImageProperties* GetProperty()
|
ExtendMedicalImageProperties* GetProperty()
|
||||||
{
|
{
|
||||||
@@ -39,6 +48,7 @@ public:
|
|||||||
bool IntersectWorldBounds(SeriesImageSet* imageSet);
|
bool IntersectWorldBounds(SeriesImageSet* imageSet);
|
||||||
private:
|
private:
|
||||||
vtkSmartPointer <vtkImageData> m_image;
|
vtkSmartPointer <vtkImageData> m_image;
|
||||||
|
vtkSmartPointer <vtkImageData> m_OverlayImage;
|
||||||
ExtendMedicalImageProperties* m_property = nullptr;
|
ExtendMedicalImageProperties* m_property = nullptr;
|
||||||
std::string m_pUniqueID;
|
std::string m_pUniqueID;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -136,6 +136,9 @@ SeriesImageSet* DicomLoader::getSeriesImageSet(const std::string& uniqueID)//, D
|
|||||||
reader->Update();
|
reader->Update();
|
||||||
auto imageData = reader->GetOutput();
|
auto imageData = reader->GetOutput();
|
||||||
SeriesImageSet* result = new SeriesImageSet((*iter),imageData);
|
SeriesImageSet* result = new SeriesImageSet((*iter),imageData);
|
||||||
|
if (reader->GetHasOverlay()){
|
||||||
|
result->SetOverlayData(reader->GetOutputOverLayData());
|
||||||
|
}
|
||||||
// imageData->Register(placeHolder);
|
// imageData->Register(placeHolder);
|
||||||
reader->Delete();
|
reader->Delete();
|
||||||
reader = nullptr;
|
reader = nullptr;
|
||||||
|
|||||||
@@ -30,8 +30,10 @@ QPixmap DicomUtil::GetThumbnail(ExtendMedicalImageProperties *property) {
|
|||||||
//将原始传输语法输入DicomImage编译类库自我解压压缩的图像
|
//将原始传输语法输入DicomImage编译类库自我解压压缩的图像
|
||||||
DicomImage dcmImage(fileFormat, dset->getOriginalXfer(), CIF_MayDetachPixelData);
|
DicomImage dcmImage(fileFormat, dset->getOriginalXfer(), CIF_MayDetachPixelData);
|
||||||
unsigned long w = 100;
|
unsigned long w = 100;
|
||||||
|
|
||||||
bool flag = dcmImage.getWidth() > dcmImage.getHeight();
|
bool flag = dcmImage.getWidth() > dcmImage.getHeight();
|
||||||
DicomImage *sdcmImage = dcmImage.createScaledImage(w, 0, 0, 1);
|
DicomImage *sdcmImage = dcmImage.createScaledImage(w, 0, 0, 1);
|
||||||
|
|
||||||
sdcmImage->setWindow(wl, ww);
|
sdcmImage->setWindow(wl, ww);
|
||||||
if (sample == 1) {
|
if (sample == 1) {
|
||||||
uchar *data = (uchar *) sdcmImage->getOutputData(8);//按8位的位宽取数据
|
uchar *data = (uchar *) sdcmImage->getOutputData(8);//按8位的位宽取数据
|
||||||
|
|||||||
@@ -254,6 +254,29 @@ void DICOMImageViewer::SetInputConnection(vtkAlgorithmOutput *input) {
|
|||||||
this->RemoveFusionData();
|
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() {
|
vtkTypeBool DICOMImageViewer::GetOffScreenRendering() {
|
||||||
return this->RenderWindow->GetOffScreenRendering();
|
return this->RenderWindow->GetOffScreenRendering();
|
||||||
}
|
}
|
||||||
@@ -1223,6 +1246,7 @@ void DICOMImageViewer::SetReconPlane(int plane) {
|
|||||||
SetSlice(0);
|
SetSlice(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int DICOMImageViewer::GetReconPlane() {
|
int DICOMImageViewer::GetReconPlane() {
|
||||||
if (SlicePlane>=0) return SlicePlane;
|
if (SlicePlane>=0) return SlicePlane;
|
||||||
double projVector[4] = {.0, .0, .0, 1.0};
|
double projVector[4] = {.0, .0, .0, 1.0};
|
||||||
@@ -1233,7 +1257,6 @@ int DICOMImageViewer::GetReconPlane() {
|
|||||||
return ::projToPlane(ret);
|
return ::projToPlane(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DICOMImageViewer::UpdateReconPlane() {
|
void DICOMImageViewer::UpdateReconPlane() {
|
||||||
// Set the camera position
|
// Set the camera position
|
||||||
vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : nullptr;
|
vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : nullptr;
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ public:
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
void SetOverlayInputData(vtkImageData *in);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set/get the slice orientation
|
* Set/get the slice orientation
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -155,6 +155,10 @@ void DicomImageView::loadSeries(SeriesImageSet *series) {
|
|||||||
.arg(time)
|
.arg(time)
|
||||||
.arg(series->GetProperty()->GetSeriesDescription()));
|
.arg(series->GetProperty()->GetSeriesDescription()));
|
||||||
mImageViewer->SetInputData(mSeries->GetData());
|
mImageViewer->SetInputData(mSeries->GetData());
|
||||||
|
if(mSeries->GetOverlayData())
|
||||||
|
{
|
||||||
|
mImageViewer->SetOverlayInputData(mSeries->GetOverlayData());
|
||||||
|
}
|
||||||
mImageViewer->SetCoordsTransformMatrix(series->GetProperty());
|
mImageViewer->SetCoordsTransformMatrix(series->GetProperty());
|
||||||
mImageViewer->InitCornerInfo(series->GetProperty());
|
mImageViewer->InitCornerInfo(series->GetProperty());
|
||||||
mImageViewer->SetupImageViewer();
|
mImageViewer->SetupImageViewer();
|
||||||
|
|||||||
Reference in New Issue
Block a user