自从VTK5以后的版本对管线进行了一定的更改以后,老版的一些功能发生了改变,这里给出新版本的两个程序,用来显示一张图片:
程序1:
`#include <vtkSmartPointer.h>
#include <vtkPNGReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCallbackCommand.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkBMPReader.h>
long pressCounts = 0;
//第一步,定义回调函数。注意回调函数的签名,不能更改。
void MyCallbackFunc(vtkObject*, unsigned long eid, void* clientdata, void *calldata)
{
std::cout << "You have clicked: " << ++pressCounts << " times." << std::endl;
}
//测试图像:../data/VTK-logo.png
int main(int argc, char* argv[])
{
vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("VTK-logo.bmp");
vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();
//重要
viewer->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
viewer->SetupInteractor(interactor);
viewer->Render();
viewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
viewer->SetSize(640, 480);
viewer->GetRenderWindow()->SetWindowName("ObserverCommandDemo1");
//第二步,设置回调函数。
vtkSmartPointer<vtkCallbackCommand> mouseCallback =
vtkSmartPointer<vtkCallbackCommand>::New();
mouseCallback->SetCallback(MyCallbackFunc);
//第三步,将vtkCallbackCommand对象添加到观察者列表。
interactor->SetRenderWindow(viewer->GetRenderWindow());
interactor->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);
interactor->Initialize();
interactor->Start();
return EXIT_SUCCESS;
}`
重点是: viewer->SetInputConnection(reader->GetOutputPort()); 这句程序
程序二:
`#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkJPEGReader.h>
#include <vtkImageActor.h>
//测试:../data/VTKBook-TestImage.jpg
int main(int argc, char* argv[])
{
char* fileName = argv[1];
vtkSmartPointer<vtkJPEGReader> reader =
vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName("data\\texture.jpg");
reader->Update();
vtkSmartPointer<vtkImageActor> imageActor =
vtkSmartPointer<vtkImageActor>::New();
imageActor->SetInputData(reader->GetOutput());
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(imageActor);
renderer->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
renWin->Render();
renWin->SetWindowName("InteractionDemo");
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
iren->SetInteractorStyle(style);
iren->Initialize();
iren->Start();
return EXIT_SUCCESS;
}`
重点是: imageActor->SetInputData(reader->GetOutput()); 这行代码