/* ---------------------------------------------------------- * 文件名称:main.cpp * 作者:秦建辉 * * 微信:splashcn * * 开发环境: * Visual Studio V2019 * VTK 9.0.1 * * 版本历史: * * V1.0 2021年04月23日 * VTK例子代码 ------------------------------------------------------------ */ #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleImage.h> #include <vtkImageData.h> #include <vtkImageExtractComponents.h> #include <vtkBMPReader.h> #include <vtkImageActor.h> #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); // vtkSmartPointer #pragma comment(lib,"vtkCommonCore-9.0.lib") // vtkRenderWindow #pragma comment(lib,"vtkRenderingCore-9.0.lib") // vtkInteractorStyle #pragma comment(lib,"vtkInteractionStyle-9.0.lib") // vtkRenderingOpenGL2 #pragma comment(lib,"vtkRenderingOpenGL2-9.0.lib") // vtkCylinderSource #pragma comment(lib,"vtkFiltersSources-9.0.lib") // vtkAlgorithm #pragma comment(lib,"vtkCommonExecutionModel-9.0.lib") // vtkImageExtractComponents #pragma comment(lib,"vtkImagingCore-9.0.lib") // vtkBMPReader #pragma comment(lib,"vtkIOImage-9.0.lib") int main(int argc, char* argv[]) { vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New(); reader->SetFileName("../lena.bmp"); vtkSmartPointer<vtkImageExtractComponents> extractRedFilter = vtkSmartPointer<vtkImageExtractComponents>::New(); extractRedFilter->SetInputConnection(reader->GetOutputPort()); extractRedFilter->SetComponents(0); extractRedFilter->Update(); vtkSmartPointer<vtkImageExtractComponents> extractGreenFilter = vtkSmartPointer<vtkImageExtractComponents>::New(); extractGreenFilter->SetInputConnection(reader->GetOutputPort()); extractGreenFilter->SetComponents(1); extractGreenFilter->Update(); vtkSmartPointer<vtkImageExtractComponents> extractBlueFilter = vtkSmartPointer<vtkImageExtractComponents>::New(); extractBlueFilter->SetInputConnection(reader->GetOutputPort()); extractBlueFilter->SetComponents(2); extractBlueFilter->Update(); // Create actors vtkSmartPointer<vtkImageActor> inputActor = vtkSmartPointer<vtkImageActor>::New(); inputActor->SetInputData(reader->GetOutput()); vtkSmartPointer<vtkImageActor> redActor = vtkSmartPointer<vtkImageActor>::New(); redActor->SetInputData(extractRedFilter->GetOutput()); vtkSmartPointer<vtkImageActor> greenActor = vtkSmartPointer<vtkImageActor>::New(); greenActor->SetInputData(extractGreenFilter->GetOutput()); vtkSmartPointer<vtkImageActor> blueActor = vtkSmartPointer<vtkImageActor>::New(); blueActor->SetInputData(extractBlueFilter->GetOutput()); double inputViewport[4] = { 0.0, 0.0, 0.5, 0.5 }; double redViewport[4] = { 0.5, 0.0,1.0,0.5 }; double greenViewport[4] = { 0.0, 0.5, 0.5, 1.0 }; double blueViewport[4] = { 0.5, 0.5, 1.0, 1.0 };; vtkSmartPointer<vtkRenderer> inputRenderer = vtkSmartPointer<vtkRenderer>::New(); inputRenderer->SetViewport(inputViewport); inputRenderer->AddActor(inputActor); inputRenderer->ResetCamera(); inputRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer<vtkRenderer> redRenderer = vtkSmartPointer<vtkRenderer>::New(); redRenderer->SetViewport(redViewport); redRenderer->AddActor(redActor); redRenderer->ResetCamera(); redRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer<vtkRenderer> greenRenderer = vtkSmartPointer<vtkRenderer>::New(); greenRenderer->SetViewport(greenViewport); greenRenderer->AddActor(greenActor); greenRenderer->ResetCamera(); greenRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer<vtkRenderer> blueRenderer = vtkSmartPointer<vtkRenderer>::New(); blueRenderer->SetViewport(blueViewport); blueRenderer->AddActor(blueActor); blueRenderer->ResetCamera(); blueRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(inputRenderer); renderWindow->AddRenderer(redRenderer); renderWindow->AddRenderer(greenRenderer); renderWindow->AddRenderer(blueRenderer); renderWindow->SetSize(800, 600); renderWindow->Render(); renderWindow->SetWindowName("ImageExtractComponentsExample"); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }