vtk itk qt 遇到的问题

这是一个QVTKWidget的子类,用于动态创建窗口,来显示dicom图像

imageWidget::imageWidget(QVTKWidget *parent)
    : QVTKWidget(parent)
{
    //setAcceptDrops(true);
    //this->setStyleSheet("background-color: rgb(255,0,0);");
    //QTime t;
    //t.start();//将此时间设置为当前时间
    //itk读取图像
    typedef itk::Image<short,3> ItkImageType;                           //图像类型   ImageType
    typedef itk::ImageFileReader<ItkImageType> ItkImgReaderType;        //用户读
    typedef itk::ImageToVTKImageFilter<ItkImageType> ItkToVtkFilterType;//链接ITK和VTK的类
    ItkImgReaderType::Pointer itkImgReader = ItkImgReaderType::New();                                
    ItkToVtkFilterType::Pointer itkTovtkImageFilter  = ItkToVtkFilterType::New();                    
    itk::GDCMImageIO::Pointer itkDicomIO = itk::GDCMImageIO::New();

    char *dcmFileName = "data\\1.3.46.670589.33.1.63682629987876745200001.5330259530840410603.dcm";
    itkImgReader->SetImageIO(itkDicomIO);                      //之后可以用itkDicomIO获取读到的DICOM数据中的各字段信息,关联GDCMImageIO类后,DICOM数据信息就读入内存,ITK能获取更加全面的信息(比起VTK) 
    itkImgReader->SetFileName(dcmFileName);                    //读取dcm文件,内部是通过GDCMImageIO读取的,所以一定要设置这个。
    itkImgReader->Update();                                    //开始读取数据

    itkTovtkImageFilter->SetInput(itkImgReader->GetOutput());  //设置图像数据从ITK转向VTK

    itkTovtkImageFilter->Update();                             //开始转换,将ITK读取的图像数据转换成vtkImageData并传给VTK的渲染模块:

    //------------------------------itk读取完成--------------------------------
    //图像翻转
    vtkImageFlip* vtkImageflip = vtkImageFlip::New();
    vtkImageflip->SetInputData(itkTovtkImageFilter->GetOutput());
    vtkImageflip->SetFilteredAxis(1);
    vtkImageflip->Update();                                      //不加这句会出现数据错误

    vtkSmartPointer<vtkImageViewer2> viewer =
        vtkSmartPointer<vtkImageViewer2>::New();
    viewer->SetGlobalWarningDisplay(false);
    //viewer->SetInputConnection(vtkImageflip->GetOutputPort());

    vtkImageData *data = vtkImageflip->GetOutput();

    viewer->SetInputData(data);

    viewer->GetRenderer()->SetBackground(1,1,1);    
    //------------------都是可以的-----------------------
    //viewer->SetRenderWindow(widget.GetRenderWindow());               //设置渲染窗口

    //默认的切片方向是XY方向,为2.三维系数是怎么得来的。
    this->SetRenderWindow(viewer->GetRenderWindow());                   //设置渲染窗口
    //viewer->SetRenderWindow(this->GetRenderWindow());                 //

    //----------------------------------------------------

    //vtkSmartPointer<vtkRenderWindowInteractor> imgInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    //defInteractorStyle = vtkSmartPointer<DefinedInteractorStyle>::New();
    //imgInteractor->SetInteractorStyle(defInteractorStyle);
    //imgPicker = vtkSmartPointer<vtkCellPicker>::New();
    //imgInteractor->SetPicker(imgPicker);
    viewer->GetRenderer()->ResetCamera();
    //viewer->GetRenderer()->GetActiveCamera()->SetParallelScale(255.5);
    //widget.GetRenderWindow()->Render();
    //widget.GetRenderWindow()->SetInteractor(viewer->GetRenderWindow()->GetInteractor());
    //vtkSmartPointer<vtkRenderWindowInteractor> imgInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    //vtkSmartPointer<DefinedInteractorStyle> defInteractorStyle = vtkSmartPointer<DefinedInteractorStyle>::New();
    //imgInteractor->SetInteractorStyle(defInteractorStyle);
    //vtkSmartPointer<vtkCellPicker> imgPicker = vtkSmartPointer<vtkCellPicker>::New();
    //imgInteractor->SetPicker(imgPicker);
    //viewer->SetupInteractor(this->GetRenderWindow()->GetInteractor());                               //设置自定义交互,这样设置就不行
    this->GetRenderWindow()->SetInteractor(viewer->GetRenderWindow()->GetInteractor());                //设置为viewer的交互
    //this->GetRenderWindow()->SetInteractor(viewer->GetRenderWindow()->GetInteractor());
    //VtkEventQtSlot *eve = new VtkEventQtSlot(this);
    //viewer->SetColorLevel(138.5);
    //viewer->SetColorWindow(233);
    //this->GetRenderWindow()->Render(); //这样也能渲染出来,但是相机不对
    //qDebug()<<QString::fromLocal8Bit("整条渲染管线的时间:")<<t.elapsed()<<"ms";
    //viewer->Render();                 //最后再渲染,函数里面调用了重置相机和渲染窗口进行render。
}

当在qt界面利用gridLayout在界面上创建4*4,3*3的切分窗口的时候,由于vtk渲染管线的耗时特别长,导致界面产生到图像渲染出来特别不流畅,影响体验,暂时不知道什么原因,谁要是知道,麻烦指导下,不胜感激!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值