2014-08-28 1 views
1

저는 프로그램에서 작업 중이며 주위에 GUI를 만들기로 결정했습니다. 내가 시작하고 싶은 것은 꽤 간단하며, 영화를로드하고 스크롤 할 수 있습니다. 저는 청취자에 관한 많은 질문을 살펴 보았습니다. 실제로 누군가이 질문을 던졌지 만 그 해결책은 저에게 효과적이지 않았습니다. GUI를 내 개방 기능에 나는 잘 작동연속 슬라이더 수신기가 새로운 빈 그림을 만듭니다.

  handles.output = hObject; 
     handles.sliderListener = addlistener(handles.Image_Slider,'ContinuousValueChange', ... 
               @(hObject, event) Image_Slider_ContValueCallback(... 
               hObject, eventdata, handles)); 
     % Update handles structure 
     guidata(hObject, handles); 

    And then I have the following two call backs : 
    function Image_Slider_Callback(hObject, eventdata, handles) 
    % hObject handle to Image_Slider (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 
    handles=guidata(hObject); 
    current_slice = round(get(handles.Image_Slider,'Value')); 
    %size(handles.Image_Sequence_Data(:,:,current_slice)); 


im =imagesc(handles.Image_Sequence_Data(:,:,current_slice),'Parent',handles.Image_Sequence_Plot); 
colormap('gray'); 

(리스너 모든없이 제대로 다르게 동작)

을 한 후 나는 또한 내가 생각

function Image_Slider_ContValueCallback(hObject, eventdata, handles) 
% hObject handle to Image_Slider (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
handles=guidata(hObject); 
current_slice = round(get(handles.Image_Slider,'Value')); 
%size(handles.Image_Sequence_Data(:,:,current_slice)); 
handles=guidata(hObject); 

%im = 
imagesc(handles.Image_Sequence_Data(:,:,current_slice),'Parent',handles.Image_Sequence_Plot); 
colormap('gray'); 

이 호출 할 필요가 있습니다 슬라이더가 계속 움직일 때 내 문제는 슬라이더 값이 공백으로 변경 될 때마다 ("그림 1") 나타납니다. 실제 GUI 데이터가 올바르게 응답하지만, 왜이 '불량'인물이 어디에서 왔는지 이해할 수 없습니다.

누군가 도와주세요. 또한 imshow와 imagesc에 대한 의견이 더 좋습니다 (이 GUI는 이미지와 많은 사용자 상호 작용이 필요합니다).

답변

1

한 번 같은 문제가있었습니다. 내가 작업 예제를 테스트 할 수 없습니다 그래서 지금은 matlab에 대한 액세스 권한이없는,하지만 순간 나는이 선 배치 제안 : 귀하의 슬라이더의 CreateFcn에서

handles.sliderListener = addlistener(handles.Image_Slider,'ContinuousValueChange', ... 
               @(hObject, event) Image_Slider_ContValueCallback(... 
               hObject, eventdata, handles)); 

합니다. 아마도 슬라이더를 움직일 때마다 빈 그림이 나타납니다. 왜냐하면 슬라이더가 리스너 객체에 링크되어있어 하나를 연속적으로 생성한다는 것을 모르기 때문입니다. 그것이 작동하지 않는 경우

, 당신은 예를 들어 귀하의 축에 표시되는 현재 프레임을 업데이트 할 수있는 GUI 외부의 함수를 호출 할 수 있습니다 : 대신 GUI의 콜백의

handles.sliderListener = addlistener(handles.Image_Slider,'ContinuousValueChange', ... 
               @(a,b) UpdateCurrentFrame); 

합니다. a 및 b는 더미 입력 인수이고 UpdateCurrentFrame에는 예를 들어 imshow에 대한 호출이 포함될 수 있습니다. 가장 우아한 방법은 아니지만 완벽하게 작동했습니다.

오, imagesc 및 imshow에 관해서는 개인적으로 imshow를 선호합니다. 필자의 경우 ROI 선택을 위해 텍스트 주석과 사각형을 사용했으며 정확하게 업데이트되지 않는 이미지 나 직사각형이 붙어있는 이미지 측면에서 이미지 C에 거의 문제가 없었습니다. 그러나 올바르게 사용하지 못했을 수도 있습니다.

희망 하시겠습니까?

+0

감사합니다. 완벽하게 작동했습니다. –

+0

큰 도움이 기쁩니다! –