用VTK显示图像的几种方式:
方式1:
读取数据-----映射(mapper)------演员(actor)-------渲染(render)-----渲染窗口(renwin)----交互方式
在console下实现的代码如下:
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkImageViewer.h"
#include "vtkImageViewer2.h"
#include"vtkPNGReader.h"
#include "vtkImageActor.h"
#include "vtkInteractorStyleImage.h"
#include "vtkActor2D.h"
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic with the way of one
int main()
{
int extent[6];
vtkSmartPointer< vtkPNGReader>m_reader = vtkSmartPointer<vtkPNGReader>::New();
m_reader->SetFileName("1.png");
m_reader->SetDataByteOrderToLittleEndian();//the type of data reading
m_reader->SetDataScalarTypeToUnsignedChar();//the type of data
m_reader->SetFileDimensionality(3);
vtkSmartPointer<vtkImageMapper>mapper = vtkSmartPointer<vtkImageMapper>::New();
mapper->SetInputConnection(m_reader->GetOutputPort());
mapper->SetColorLevel(128);
mapper->SetColorWindow(256);
vtkSmartPointer<vtkActor2D>actor = vtkSmartPointer<vtkActor2D>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer>m_Renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>m_RenWin = vtkSmartPointer<vtkRenderWindow>::New();
m_RenWin->AddRenderer(m_Renderer);
vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(m_RenWin);
vtkSmartPointer<vtkInteractorStyleImage>interactor = vtkSmartPointer<vtkInteractorStyleImage>::New();
iren->SetInteractorStyle(interactor);
m_Renderer->AddActor(actor);
m_Renderer->SetBackground(0, 0, 0);
m_RenWin->Render();
m_reader->GetDataExtent(extent);
iren->Initialize();
iren->Start();
return 0;
}
图像数据读取----数据给imageactor----渲染显示
在console下实现如下
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkImageViewer.h"
#include "vtkImageViewer2.h"
#include"vtkPNGReader.h"
#include "vtkImageActor.h"
#include "vtkInteractorStyleImage.h"
#include "vtkActor2D.h"
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic with the way of 2
int main()
{
vtkSmartPointer<vtkPNGReader> m_reader = vtkSmartPointer<vtkPNGReader>::New();
m_reader->SetFileName("1.png");
m_reader->SetDataByteOrderToLittleEndian();
m_reader->SetDataScalarTypeToUnsignedChar();
m_reader->SetFileDimensionality(3);
m_reader->Update();
vtkSmartPointer<vtkImageActor>m_Actor = vtkSmartPointer<vtkImageActor>::New();
m_Actor->SetInputData(m_reader->GetOutput());
vtkSmartPointer<vtkRenderer>m_Renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>m_RenWin = vtkSmartPointer<vtkRenderWindow>::New();
m_RenWin->AddRenderer(m_Renderer);
vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(m_RenWin);
vtkSmartPointer<vtkInteractorStyleImage>interactor = vtkSmartPointer<vtkInteractorStyleImage>::New();
iren->SetInteractorStyle(interactor);
m_RenWin->SetSize(300, 300);
m_Renderer->AddActor(m_Actor);
m_Renderer->SetBackground(0.0, 0.0, 0.0);
m_RenWin->Render();
iren->Initialize();
iren->Start();
return 0;
}
用ImageView2
console实现如下:
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkImageViewer.h"
#include "vtkImageViewer2.h"
#include"vtkPNGReader.h"
#include "vtkImageActor.h"
#include "vtkInteractorStyleImage.h"
#include "vtkActor2D.h"
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic 3
int main()
{
vtkSmartPointer<vtkPNGReader> reader =
vtkSmartPointer<vtkPNGReader>::New();
reader->SetFileName("1.png");
reader->SetDataByteOrderToLittleEndian();
reader->SetDataScalarTypeToUnsignedChar();
reader->Update();
vtkSmartPointer<vtkImageViewer2> imageViewer =
vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
imageViewer->SetupInteractor(renderWindowInteractor);
imageViewer->SetColorLevel(128);
imageViewer->SetColorWindow(256);
// imageViewer->SetSlice(40);
// imageViewer->SetSliceOrientationToXY();
imageViewer->Render();
imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
// imageViewer->SetSize(640, 480);
imageViewer->GetRenderWindow()->SetSize(640, 480);
imageViewer->GetRenderWindow()->SetWindowName("DisplayImageExample");
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}