![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZzETZ2IGMxQmZmNGNlJjYkR2N0kTMkZTOxMGMjFDZi9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
先說結論,本文最終也沒有解決圖像反轉問題,僅僅是過程記錄。咨詢了老大,老大說以我的能力,暫時還搞不定,是以就暫時先擱置。
電梯
1 都是示範的錯
2 編譯MITK2.21.2
3 找問題原因
3.1vtkResliceCursorLineRepresentation
3.1.1GetRepresentation
3.1.2SetSliceOrientation
☞ 源碼
哎呀,今天可是丢人大方了,今天博士來公司了,我興匆匆的去嘚瑟下,告訴博士我實作了四視圖了,博士說那就給我示範下呗,我這就麻溜的打開我的工程,示範起來,結果,呵呵哒。
其實編譯MITK完全是吃飽了撐的,因為不用編譯,就可以看到源碼,我還是編譯了,并且折騰了好久,連結在這裡,當你掌握了,就簡單了,真的簡單,曾經也在多個夜晚罵MITK團隊,搞得啥破玩意,最後發現小醜竟是自己哈哈。其實編譯MITK是想看看人家是怎麼實作的。
https://blog.csdn.net/z609932088/article/details/118831590?spm=1001.2014.3001.5502在讀取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();
}
後面我又開始研究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。