2013-06-26 68 views
1

我正在開發一個C++應用程序,使用Qt + VTK。實際上,我有一個QVTKWidget,用於顯示DICOM圖像。我已經使用vtkImageViewer2vtkInteractorStyleImage,所以我可以通過點擊鼠標左鍵按下時改變圖像的亮度和對比度。如何恢復VTK的亮度和對比度?

但是,我希望啓用一個按鈕,以便恢復其原始值爲的亮度和對比度。我已經做了一些研究,但在文檔中我找不到任何有關它的功能,也沒有我在運行時可以更改的任何保存的亮度和對比度值。

我希望有人能幫忙。謝謝。

+0

你嘗試get/setColorLevel和get/setColorWindow? –

+0

非常感謝您的幫助,對於遲到的回覆感到抱歉。不幸的是,它似乎並不奏效。我已經嘗試使用此代碼: '空隙的MainWindow :: on_luminosityResetButton_clicked(){' 'imageViewer-> SetColorLevel(128);'' imageViewer-> SetColorWindow(255);'' UI-> qvtkWidget- > update();' '}' ,其中imageViewer是類型爲vtkSmartPointer 的全局變量。 但它只是做任何事情。這些功能是有道理的(我也嘗試過不同的值,結果是一樣的),也許我只是忘記了一些東西讓它們工作... –

回答

0

this例子,我已經能夠togheter把這個代碼:

void MainWindow::on_luminosityResetButton_clicked() 
{ 
    vtkSmartPointer<vtkImageShiftScale> shiftScaleFilter = 
    vtkSmartPointer<vtkImageShiftScale>::New(); 
    shiftScaleFilter->SetOutputScalarTypeToUnsignedChar(); 
    #if VTK_MAJOR_VERSION <= 5 
     shiftScaleFilter->SetInputConnection(imageData->GetProducerPort()); 
    #else 
     shiftScaleFilter->SetInputData(imageData); 
    #endif 
    shiftScaleFilter->SetShift(0); 
    shiftScaleFilter->SetScale(0); 
    shiftScaleFilter->Update(); 

    // Create actors 
    vtkSmartPointer<vtkImageSliceMapper> originalSliceMapper = vtkSmartPointer<vtkImageSliceMapper>::New(); 
    #if VTK_MAJOR_VERSION <= 5 
     originalSliceMapper->SetInputConnection(imageData->GetProducerPort()); 
    #else 
     originalSliceMapper->SetInputData(imageData); 
    #endif 

    vtkSmartPointer<vtkImageSlice> originalSlice = vtkSmartPointer<vtkImageSlice>::New(); 
    originalSlice->SetMapper(originalSliceMapper); 

    vtkSmartPointer<vtkImageSliceMapper> shiftScaleMapper = vtkSmartPointer<vtkImageSliceMapper>::New(); 
    shiftScaleMapper->SetInputConnection(shiftScaleFilter->GetOutputPort()); 

    vtkSmartPointer<vtkImageSlice> shiftScaleSlice = vtkSmartPointer<vtkImageSlice>::New(); 
    shiftScaleSlice->SetMapper(shiftScaleMapper); 
    shiftScaleSlice->GetProperty()->SetInterpolationTypeToNearest(); 

    renderer->AddViewProp(originalSlice); 

    vtkSmartPointer<vtkRenderer> shiftScaleRenderer = 
     vtkSmartPointer<vtkRenderer>::New(); 
    shiftScaleRenderer->AddViewProp(shiftScaleSlice); 

    ui->qvtkWidget->update(); 
} 

現在,它的工作原理(亮度和對比度得到他們的原始值),但我還沒有完全理解的邏輯背後。 因此,我不會將自己的答案標記爲正確的答案(希望獲得更相關的答案),但我仍然會將其發佈。我在其他地方看到了同樣的問題(未回答),我希望這對其他人有用。

相關問題