VTK笔记-图像相关-vtkImageActor类

前言

vtkImageActor类的官方文档vtkImageActor
vtkImageActor被用来在三维场景下渲染图像,通过纹理映射将图像映射到一个多边形上进行显示;图像被放在了设定好的起始坐标点上(一般是设定了图像的左上角第一个像素的坐标),图像的尺寸由dimensions和spacing设定;图像的方向与x-y-z轴之一正交,这取决于定义图像的平面。这个类已经被vtkImageSlice类所取代,它提供了比vtkImageActor更多的功能。
之前说过vtkImageViewer2类可以用来显示渲染图像,vtkImageActor同样可以渲染图像,使用vtkImageActor较vtkImageViewer2要复杂一些,需要建立完整的渲染管线:包括vtkImageActor、vtkRender、vtkRenderWindow和vtkRenderWindowInteractor。
另外,如果不需要在三维空间中进行旋转操作,就需要为vtkRenderWindowInteractor定义一个vtkInteractorStyleImage对象;如果需要设置图像在三维空间不同的位置和姿态,就需要对vtkActor设置转换矩阵;vtkRenderWindowInteractor只是将交互方式给屏蔽掉了;
在这里插入图片描述

1.vtkImageActor接口

1.1 数据源

virtual void SetInputData(vtkImageData*);
virtual vtkImageData* GetInput();
这个两个函数基本不在使用,使用GetMapper()->SetInputConnection()和imgActor->GetMapper()->GetOutputPort()代替;

1.1 图像透明度

virtual void SetOpacity(double);
virtual double GetOpacity();
double GetOpacityMinValue() { return 0.0; }
double GetOpacityMaxValue() { return 1.0; }
0.0表示透明,1.0表示不透明;默认值为1.0;

1.1 显示范围

void SetDisplayExtent(const int extent[6]);
void SetDisplayExtent(int minX, int maxX, int minY, int maxY, int minZ, int maxZ);
void GetDisplayExtent(int extent[6]);
int* GetDisplayExtent() VTK_SIZEHINT(6) { return this->DisplayExtent; }
double* GetBounds() VTK_SIZEHINT(6) override;void GetB
unds(double bounds[6]) { this->Superclass::GetBounds(bounds); }
double* GetDisplayBounds();void GetDisplayBounds(double bounds[6]);

2.实例

2.1步骤

1.使用vtkBMPReader读入图像;
2.建立vtkImageActor对象;
3.建立vtkRender对象;
4.建立vtkRenderWindow对象;
5.建立vtkRenderWindowInteractor对象;
6.建立vtkInteractorStyleImage交互对象;
7.组装渲染管线;
vtkBMPReader
vtkImageActor
vtkRender
vtkRenderWindow
vtkInteractorStyleImage
vtkRenderWindowInteractor

2.2 代码

#include "vtkSmartPointer.h"
#include "vtkBMPReader.h"
#include "vtkImageActor.h"
#include "vtkImageSlice.h"
#include "vtkImageMapper3D.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleImage.h"

#include "vtkAutoInit.h" 

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

using namespace std;
int main()
{
	vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
	reader->SetFileName("D:\\test.bmp");
	reader->Update();

	vtkSmartPointer<vtkImageActor> imgActor = vtkSmartPointer<vtkImageActor>::New();
	imgActor->GetMapper()->SetInputConnection(reader->GetOutputPort());

	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(imgActor);
	renderer->SetBackground(0.4, 0.5, 0.6);

	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->SetSize(500, 500);
	renderWindow->AddRenderer(renderer);
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
	renderWindowInteractor->SetInteractorStyle(style);
	renderWindowInteractor->SetRenderWindow(renderWindow);
	renderWindowInteractor->Initialize();
	renderWindowInteractor->Start();
	return 0;
}

3.资料

1.《VTK图形图像开发进阶》第五章 VTK图像处理
2. https://vtk.org/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑山老妖的笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值