vtk读取文件并显示的几种方法

转载于 http://apps.hi.baidu.com/share/detail/7831982  感谢原作者!
1.用vtkDICOMImageReader
  #include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteracto r.h"
#include "vtkImageActor.h"
#include "vtkDICOMImageReader.h"
#include "vtkImageShiftScale.h"
int main ()
{
      vtkDICOMImageReader *dcmReader = vtkDICOMImageReader::New();
      dcmReader->SetDirectoryName("E:\medicalimages\vhm");
      dcmReader->SetDataByteOrderToLittle Endian();
  double x,y,z;
  dcmReader->GetDataSpacing(x,y,z);
  dcmReader->SetDataSpacing(x,y,z);
  vtkImageShiftScale *shifter =vtkImageShiftScale::New();
  shifter->SetInputConnection(dcmReader->GetOutputPort());
  shifter->SetShift(70);
  shifter->SetScale(0.5);
  shifter->SetOutputScalarTypeToUns ignedChar();
  vtkImageActor *actor =vtkImageActor::New();
  actor->SetInput(shifter->GetOutput());
  vtkRenderer *aRender = vtkRenderer::New();//设置绘制类
  aRender->AddActor(actor);
  vtkRenderWindow*renWin=vtkRenderWindow::New();//设置绘制窗口
  renWin->SetSize(500, 500);//设置背景颜色和绘制窗口大小
  renWin->AddRenderer(aRender);//装载绘制类
  vtkRenderWindowInteracto r*iRen=vtkRenderWindowInteracto r::New();//设置绘制窗口的交互
  iRen->SetRenderWindow(renWin);//装载绘制窗口
    renWin->Render();//窗口进行绘制
  iRen->Initialize(); 
  iRen->Start(); //初始化并进行交互绘制
 
  dcmReader->Delete();
  shifter->Delete();
  actor->Delete();
  aRender->Delete();
      renWin->Delete();
  iRen->Delete(); 
        return 0;
}  
2.用vtkVolume16Reader,不限定DCM文件,不过文件后缀要以.1 .2.3...来命名,工作有得做,而且不能读太多图片,vtkArray承载不了太多数据.而且图片会错位
                        vtkVolume16Readerv16 = new vtkVolume16Reader();
                        v16.SetDataDimensions(512,512);
                        v16.SetDataByteOrderToLittle Endian();
                        v16.SetFilePrefix("F:\LiverGUI\SE4\IM");
                        v16.SetImageRange(1,100);
                        v16.SetDataSpacing(1.0,1.0, 1.0); 

3.读raw da ta...用vtkImageData,读取用vtkImageReader更快!具体查vtk手册吧!
            private void volumeRendering(String filePath, int[] dims, int[]shrinkFactor,vtkRenderWindow renWin)
                {
                        //接口说明
                        //1.filePath:dat文件名
                        //2.dims:体数据的三个维度所构成的数组
                        //3.shrinkFactor:三个元素的数组,代表长宽 高 的缩放比例
                        //4.vtkRenderWindow,窗口中添加的vtkFormsWindowControl通过GetRenderWindow方法获得的变量
                        //Readdat da ta
                        FileStreamfs = null;
                        byte[]point = new byte[2];
                        if(!File.Exists(filePath))
                        {
                                MessageBox.Show("RawDa ta doesn't exist!");
                                return;
                        }
                        fs= new FileStream(filePath, FileMode.Open, FileAccess.Read,FileShare.Read);
                        inti, j, k;
                        short[,,]rawData= new short[dims[0], dims[1], dims[2]];
                        for(i = 0; i < dims[0]; i++)
                        {
                                for(j = 0; j < dims[1]; j++)
                                {
                                        for(k = 0; k < dims[2]; k++)
                                        {
                                                point[0]= (byte)fs.ReadByte();
                                                point[1]= (byte)fs.ReadByte();
                                                rawData = BitConverter.ToInt16(point, 0);
                                        }
                                }
                        }
                        //VolumeRendeing
                        vtkImageDataid = new vtkImageData();
                        id.SetDimensions(dims[0],dims[1], dims[2]);
                        id.SetScalarTypeToShort();
                        id.SetNumberOfScalarCompone nts(1);
                        id.AllocateScalars();
                        vtkImageShrink3Dmask = new vtkImageShrink3D();
                        mask.SetInput(id);
                        mask.SetShrinkFactors(shrinkFactor[0],shrinkFactor[1], shrinkFactor[2]);
                        unsafe
                        {
                                short*a = (short*)(id.GetScalarPointer().ToPointer());
                                for(i = 0; i < dims[0]; i++)
                                {
                                        for(j = 0; j < dims[1]; j++)
                                        {
                                                for(k = 0; k < dims[2]; k++)
                                                {
                                                        *a++= rawData ;
                                                }
                                        }
                                }
                        }
                        vtkContourFiltercf = new vtkContourFilter();
                        cf.SetInputConnection(mask.GetOutputPort());
                        vtkPolyDataMappermapper = new vtkPolyDataMapper();
                        mapper.SetInputConnection(cf.GetOutputPort());
                        mapper.SetScalarRange(-2048,2047);
                        vtkActoractor = new vtkActor();
                        actor.SetMapper(mapper);
                        vtkCameraaCamera = new vtkCamera();
                        aCamera.SetViewUp(0,5, 0);
                        aCamera.SetPosition(5,0, 0);
                        aCamera.SetFocalPoint(0,0, 0);
                        aCamera.ComputeViewPlaneNormal();
                        vtkRendererren = new vtkRenderer();
                        ren.AddActor(actor);
                        ren.ResetCamera();
                        aCamera.Dolly(1.5);
                        ren.ResetCameraClippingRange ();
                        renWin.AddRenderer(ren);
                        ren.SetBackground(0.0f,0.0f, 0.0f);
                }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值