VTK7.1版本显示图像的两种方法

346 阅读1分钟

自从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()); 这行代码