2013-06-26 4 views
1

Qt + VTK를 사용하여 C++ 응용 프로그램을 개발 중입니다. 사실, 나는 QVTKWidget을 가지고 있는데, 이것은 DICOM 이미지를 디스플레이하는데 사용된다. 나는 vtkImageViewer2vtkInteractorStyleImage을 사용했기 때문에 왼쪽 버튼을 누른 상태에서 이미지를 마우스로 클릭하여 밝기와 대비를 변경할 수 있습니다.VTK의 밝기와 대비를 복원하는 방법은 무엇입니까?

그러나 밝기와 대비를 원래 값으로 복원하려면 버튼을 사용하고 싶습니다. 몇 가지 연구를 해봤지만, 문서, 문서에서 밝혀진 밝기 및 명암 대비 값과 관련하여 런타임에 변경할 수있는 기능을 찾을 수 없습니다.

누군가 도와 드릴 수 있기를 바랍니다. 고맙습니다.

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(); 
} 

가 지금은 (밝기 및 대비가 원래 값을 얻을) 작동하지만 난 완전히 그 뒤에 논리를 이해하지 않은 :

+0

get/setColorLevel 및 get/setColorWindow를 시도 했습니까? –

+0

도움을 주셔서 대단히 감사합니다. 늦게 회신을 드려서 죄송합니다. 불행히도, 그러나, 그것은 작동하지 않는 것 같습니다. 나는이 코드를 시도했다 : '무효 MainWindow를을 :: on_luminosityResetButton_clicked() {' 'imageViewer-> SetColorLevel (128);' 'imageViewer-> SetColorWindow (255);' 'UI-> qvtkWidget- > update();' '}' 입니다. 여기서 imageViewer는 vtkSmartPointer 유형의 전역 변수입니다. 하지만 단순히 모든 작업을 수행합니다. 그 함수들은 의미가 있습니다. (다른 값으로 시도해 봤는데도 결과는 같습니다.) 어쩌면 그 함수가 작동하도록하는 것을 잊어 버렸을 것입니다 ... –

답변

0

this 예에 따라, 나는을 togheter이 코드를 삽입 할 수있었습니다. 그래서 나는 내 자신의 답을 올바른 답으로 표시하지 않고 (더 적절한 답을 얻기를 희망 함) 어쨌든 그것을 게시합니다. 나는 다른 곳에서도 똑같은 이슈 (답이없는)를 보았고, 다른 사람들에게 유용 할 수 있기를 희망한다.