VTK学习笔记-2

/* ----------------------------------------------------------
 * 文件名称: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;
}


Comments are closed.