1 #include "vtkAutoInit.h"
2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
3 VTK_MODULE_INIT(vtkInteractionStyle);
4
5 #include <vtkSmartPointer.h>
6 #include <vtkImageData.h>
7 #include <vtkRenderWindow.h>
8 #include <vtkRenderWindowInteractor.h>
9 #include <vtkInteractorStyleImage.h>
10 #include <vtkRenderer.h>
11 #include <vtkImageActor.h>
12 #include <vtkBMPReader.h>
13 #include <vtkImageShrink3D.h>
14 #include <vtkImageMagnify.h>
15
16 //测试图像:../data/lena.bmp
17 int main(int argc, char* argv[])
18 {
19
20 vtkSmartPointer<vtkBMPReader> reader =
21 vtkSmartPointer<vtkBMPReader>::New();
22 reader->SetFileName ( "lena.bmp" );
23 reader->Update();
24
25 vtkSmartPointer<vtkImageShrink3D> shrinkFilter =
26 vtkSmartPointer<vtkImageShrink3D>::New();
27 shrinkFilter->SetInputConnection(reader->GetOutputPort());
28 shrinkFilter->SetShrinkFactors(16,16,1);
29 shrinkFilter->Update();
30
31 vtkSmartPointer<vtkImageMagnify> magnifyFilter =
32 vtkSmartPointer<vtkImageMagnify>::New();
33 magnifyFilter->SetInputConnection(reader->GetOutputPort());
34 magnifyFilter->SetMagnificationFactors(10,10,1);
35 magnifyFilter->Update();
36
37 int originalDims[3];
38 reader->GetOutput()->GetDimensions(originalDims);
39
40 double originalSpace[3];
41 reader->GetOutput()->GetSpacing(originalSpace);
42
43 int shrinkDims[3];
44 shrinkFilter->GetOutput()->GetDimensions(shrinkDims);
45
46 double shrinkSpace[3];
47 shrinkFilter->GetOutput()->GetSpacing(shrinkSpace);
48
49 int magnifyDims[3];
50 magnifyFilter->GetOutput()->GetDimensions(magnifyDims);
51
52 double magnifySpace[3];
53 magnifyFilter->GetOutput()->GetSpacing(magnifySpace);
54
55 std::cout<<"原图图像维数 :"<<originalDims[0] << " "<<originalDims[1]<<" "<<originalDims[2]<<std::endl;
56 std::cout<<"原图图像像素间隔 :"<<originalSpace[0] << " "<<originalSpace[1]<<" "<<originalSpace[2]<<std::endl;
57 std::cout<<"降采样图像维数 :"<<shrinkDims[0] << " "<<shrinkDims[1]<<" "<<shrinkDims[2]<<std::endl;
58 std::cout<<"降采样图像像素间隔:"<<shrinkSpace[0] << " "<<shrinkSpace[1]<<" "<<shrinkSpace[2]<<std::endl;
59 std::cout<<"升采样图像维数 :"<<magnifyDims[0] << " "<<magnifyDims[1]<<" "<<magnifyDims[2]<<std::endl;
60 std::cout<<"升采样图像像素间隔:"<<magnifySpace[0] << " "<<magnifySpace[1]<<" "<<magnifySpace[2]<<std::endl;
61
62 vtkSmartPointer<vtkImageActor> originalActor =
63 vtkSmartPointer<vtkImageActor>::New();
64 originalActor->SetInputData(reader->GetOutput());
65
66 vtkSmartPointer<vtkImageActor> shrinkActor =
67 vtkSmartPointer<vtkImageActor>::New();
68 shrinkActor->SetInputData(shrinkFilter->GetOutput());
69
70 vtkSmartPointer<vtkImageActor> magnifyActor =
71 vtkSmartPointer<vtkImageActor>::New();
72 magnifyActor->SetInputData(magnifyFilter->GetOutput());
73
74 double originalViewport[4] = {0.0, 0.0, 0.33, 1.0};
75 double shrinkViewport[4] = {0.33, 0.0, 0.66, 1.0};
76 double magnifyViewport[4] = {0.66, 0.0, 1.0, 1.0};
77
78 vtkSmartPointer<vtkRenderer> originalRenderer =
79 vtkSmartPointer<vtkRenderer>::New();
80 originalRenderer->SetViewport(originalViewport);
81 originalRenderer->AddActor(originalActor);
82 originalRenderer->ResetCamera();
83 originalRenderer->SetBackground(1.0, 1.0, 1.0);
84
85 vtkSmartPointer<vtkRenderer> shrinkRenderer =
86 vtkSmartPointer<vtkRenderer>::New();
87 shrinkRenderer->SetViewport(shrinkViewport);
88 shrinkRenderer->AddActor(shrinkActor);
89 shrinkRenderer->ResetCamera();
90 shrinkRenderer->SetBackground(1.0, 1.0, 1.0);
91
92 vtkSmartPointer<vtkRenderer> magnifyRenderer =
93 vtkSmartPointer<vtkRenderer>::New();
94 magnifyRenderer->SetViewport(magnifyViewport);
95 magnifyRenderer->AddActor(magnifyActor);
96 magnifyRenderer->ResetCamera();
97 magnifyRenderer->SetBackground(1.0, 1.0, 1.0);
98
99 vtkSmartPointer<vtkRenderWindow> renderWindow =
100 vtkSmartPointer<vtkRenderWindow>::New();
101 renderWindow->AddRenderer(originalRenderer);
102 renderWindow->AddRenderer(shrinkRenderer);
103 renderWindow->AddRenderer(magnifyRenderer);
104 renderWindow->SetSize(640, 320);
105 renderWindow->Render();
106 renderWindow->SetWindowName("ImageShrinkMagnifyExample");
107
108 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
109 vtkSmartPointer<vtkRenderWindowInteractor>::New();
110 vtkSmartPointer<vtkInteractorStyleImage> style =
111 vtkSmartPointer<vtkInteractorStyleImage>::New();
112
113 renderWindowInteractor->SetInteractorStyle(style);
114 renderWindowInteractor->SetRenderWindow(renderWindow);
115 renderWindowInteractor->Initialize();
116 renderWindowInteractor->Start();
117
118 return EXIT_SUCCESS;
119 }