先说结论,本文最终也没有解决图像反转问题,仅仅是过程记录。咨询了老大,老大说以我的能力,暂时还搞不定,所以就暂时先搁置。
电梯
1 都是演示的错
2 编译MITK2.21.2
3 找问题原因
3.1vtkResliceCursorLineRepresentation
3.1.1GetRepresentation
3.1.2SetSliceOrientation
☞ 源码
1 都是演示的错
哎呀,今天可是丢人大方了,今天博士来公司了,我兴匆匆的去嘚瑟下,告诉博士我实现了四视图了,博士说那就给我演示下呗,我这就麻溜的打开我的工程,演示起来,结果,呵呵哒。
2 编译MITK2.21.2
其实编译MITK完全是吃饱了撑的,因为不用编译,就可以看到源码,我还是编译了,并且折腾了好久,链接在这里,当你掌握了,就简单了,真的简单,曾经也在多个夜晚骂MITK团队,搞得啥破玩意,最后发现小丑竟是自己哈哈。其实编译MITK是想看看人家是怎么实现的。
https://blog.csdn.net/z609932088/article/details/118831590?spm=1001.2014.3001.5502
3 找问题原因
在读取DICOM文件的时候,我使用的是vtkDICOMImageReader,而且用法也很简单,代码如下,这里不是出问题的地方,而且我也通过另外一个例子证明了。
到了怀疑的地方了,这里rep->GetResliceCursorActor()->GetCursorAlgorithm()->SetReslicePlaneNormal(i);,如果把这句话注释掉的话,那就会报错误Resetting view-up since view plane normal is parallel,这个错误里面有一个关键字view-up,通过有道翻译出来的也不咋懂,重置视图,因为视图平面法线是平行的
for (int i = 0; i < 3; i++) { vtkResliceCursorLineRepresentation *rep = vtkResliceCursorLineRepresentation::SafeDownCast(riw[i]->GetResliceCursorWidget()->GetRepresentation()); riw[i]->SetResliceCursor(riw[0]->GetResliceCursor()); rep->GetResliceCursorActor()->GetCursorAlgorithm()->SetReslicePlaneNormal(i); riw[i]->SetInputData(reader->GetOutput()); riw[i]->SetSliceOrientation(i); // riw[i]->SetResliceModeToAxisAligned(); riw[i]->SetResliceModeToOblique(); }
3.1.2SetSliceOrientation
后面我又开始研究SetSliceOrientation,源码如下:
测试这个接口是有影响,但是呢,运行就死机,好尴尬。
/** * Set/get the slice orientation */ enum { SLICE_ORIENTATION_YZ = 0, SLICE_ORIENTATION_XZ = 1, SLICE_ORIENTATION_XY = 2 }; vtkGetMacro(SliceOrientation, int); virtual void SetSliceOrientation(int orientation); virtual void SetSliceOrientationToXY() { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_XY); }; virtual void SetSliceOrientationToYZ() { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_YZ); }; virtual void SetSliceOrientationToXZ() { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_XZ); };
在使用原生Demo测试时候,也是会出现错误,VS报告如下:这个Qt就得出来背锅了,不明白的就是为什么设置按照顺序012可以,倒过来就不可以呢,费解,发生这个问题后面找到了解决方法,就是换Qt版本,目前我虽然使用了5.14.2 的壳子,但是内核还是5.7.1 这个版本的的问题还真是多,也不知道算不算是BUG。