1. 程式人生 > >vtk讀取檔案並顯示的幾種方法

vtk讀取檔案並顯示的幾種方法

1.用vtkDICOMImageReader  #include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h" #include "vtkImageActor.h"
#include "vtkDICOMImageReader.h"
#include "vtkImageShiftScale.h"
int main ()
{
   vtkDICOMImageReader *dcmReader = vtkDICOMImageReader::New();
   dcmReader->SetDirectoryName("E:\medicalimages\vhm");
   dcmReader->SetDataByteOrderToLittleEndian();
 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->SetOutputScalarTypeToUnsignedChar();  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);//裝載繪製類  vtkRenderWindowInteractor*iRen=vtkRenderWindowInteractor::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.SetDataByteOrderToLittleEndian();
            v16.SetFilePrefix("F:\LiverGUI\SE4\IM");
            v16.SetImageRange(1,100);
            v16.SetDataSpacing(1.0,1.0, 1.0); 

3.讀raw data...用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 data
            FileStreamfs = null;
            byte[]point = new byte[2];
            if(!File.Exists(filePath))
            {
                MessageBox.Show("RawData doesn't exist!");