// Create an image of a rectangle
vtkNew<vtkImageCanvasSource2D> source;
source->SetScalarTypeToUnsignedChar();
source->SetNumberOfScalarComponents(1);
source->SetExtent(0, 250, 0, 250, 0, 0);
// Create a red image
source->SetDrawColor(0,0,0);//创建黑色背景
source->FillBox(0,250,0,250);//填充颜色
source->Update();
// Create a rectanglular mask
vtkNew<vtkImageCanvasSource2D> maskSource;
maskSource->SetScalarTypeToUnsignedChar();
maskSource->SetNumberOfScalarComponents(1);
maskSource->SetExtent(0, 250, 0, 250, 0, 0);
// Initialize the mask to black
maskSource->SetDrawColor(255,0,0);
maskSource->DrawCircle(125, 125, 50);//白色mask 圆圈
maskSource->FillPixel(125,125);//填充颜色
maskSource->Update();
vtkNew<vtkImageMask> maskFilter;
maskFilter->SetInputConnection(0, source->GetOutputPort());
maskFilter->SetInputConnection(1, maskSource->GetOutputPort());
maskFilter->SetMaskedOutputValue(0,1,0);
maskFilter->Update();
vtkNew<vtkImageMask> inverseMaskFilter ;
inverseMaskFilter->SetInputConnection(0, source->GetOutputPort());
inverseMaskFilter->SetInputConnection(1, maskSource->GetOutputPort());
inverseMaskFilter->SetMaskedOutputValue(0,1,0);
inverseMaskFilter->NotMaskOn();
inverseMaskFilter->Update();
// Create actors
vtkNew<vtkImageActor> originalActor ;
originalActor->GetMapper()->SetInputConnection(source->GetOutputPort());
vtkNew<vtkImageActor> maskActor ;
maskActor->GetMapper()->SetInputConnection(maskSource->GetOutputPort());
vtkNew<vtkImageActor> maskedActor ;
maskedActor->GetMapper()->SetInputConnection(maskFilter->GetOutputPort());
vtkNew<vtkImageActor> inverseMaskedActor ;
inverseMaskedActor->GetMapper()->SetInputConnection(inverseMaskFilter->GetOutputPort());
// Define viewport ranges
// (xmin, ymin, xmax, ymax)
double maskViewport1[4] = { 0.00, 0.0, 0.25, 1.0};
double maskViewport2[4] = { 0.25, 0.0, 0.50, 1.0};
double maskViewport3[4] = { 0.50, 0.0, 0.75, 1.0};
double maskViewport4[4] = { 0.75, 0.0, 1.00, 1.0};
// Setup renderers
vtkNew<vtkRenderer> originalRenderer ;
originalRenderer->SetViewport(maskViewport1);
originalRenderer->AddActor(originalActor);
originalRenderer->ResetCamera();
originalRenderer->SetBackground(.4, .5, .6);
vtkNew<vtkRenderer> maskRenderer ;
maskRenderer->SetViewport(maskViewport2);
maskRenderer->AddActor(maskActor);
maskRenderer->ResetCamera();
maskRenderer->SetBackground(.4, .5, .6);
vtkNew<vtkRenderer> maskedRenderer ;
maskedRenderer->SetViewport(maskViewport3);
maskedRenderer->AddActor(maskedActor);
maskedRenderer->ResetCamera();
maskedRenderer->SetBackground(.4, .5, .6);
vtkNew<vtkRenderer> inverseMaskedRenderer ;
inverseMaskedRenderer->SetViewport(maskViewport4);
inverseMaskedRenderer->AddActor(inverseMaskedActor);
inverseMaskedRenderer->ResetCamera();
inverseMaskedRenderer->SetBackground(.4, .5, .6);
vtkNew<vtkRenderWindow> renderWindow ;
renderWindow->SetSize(1000, 250);
renderWindow->AddRenderer(originalRenderer);
renderWindow->AddRenderer(maskRenderer);
renderWindow->AddRenderer(maskedRenderer);
renderWindow->AddRenderer(inverseMaskedRenderer);
vtkNew<vtkRenderWindowInteractor> renderWindowInteractor ;
vtkNew<vtkInteractorStyleImage> style ;
renderWindowInteractor->SetInteractorStyle(style);
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
VTK生成Mask
最新推荐文章于 2023-09-26 16:35:38 发布