In meinem GUIDE generierte GUI habe ich ein Achsenobjekt, in das ich eine Bitmap imshow()
wenn die GUI initialisiert. Ich habe ein WindowButtonMotion Rückruf wie folgt definiert:Matlab WindowButtonMotion Callback funktioniert nicht mehr, wenn das Bild geändert wird
function theGui_WindowButtonMotionFcn(hObject, eventdata, handles)
% handles.mode_manager is initialized in the gui startup code
if (isempty(handles.mode_manager.CurrentMode))
obj_han=overobj('axes');
if ~isempty(obj_han)
set(handles.theGui, 'Pointer','cross');
else
set(handles.theGui, 'Pointer','arrow');
end
end
end
habe ich einen Rückruf auf die geöffnete Datei in der Symbolleiste auf das dies tut:
function openFile_ClickedCallback(hObject, eventdata, handles)
% handles.image_handle received the handle from the imshow that
% opened the initial image
tmp_handle = handles.image_handle;
[name, path] = uigetfile({'*.bmp'; '*.jpg'});
if (path == 0)
return
else
filename = strcat(path, name);
end
% read the image into the axes panel
hold on
handles.image_handle = imshow(filename);
set(handles.image_handle, 'ButtonDownFcn', @imageMouseDown);
handles.mode_manager = uigetmodemanager();
delete(tmp_handle);
guidata(hObject, handles);
end
Nachdem das neue Bild in den Achsen Objekt der angezeigt wird gui, der Zeiger ändert sich nicht mehr in ein Kreuz über dem Achsenobjekt. Das Problem hat etwas mit dem neu angezeigten Bild zu tun, denn wenn ich den Teil des Codes, der das neue Bild tatsächlich anzeigt, auskommentiere, erscheint der Zeiger nach dem Aufruf des OpenFile-Callbacks als Kreuz.
Danke, das funktioniert. Aber ich verstehe immer noch nicht warum. Der WindowButtonMotion-Callback sucht, ob der Zeiger über einem * Achsenobjekt liegt, nicht an einem bestimmten. Auch wenn das Objekt ersetzt wurde, befindet sich der Zeiger immer noch über einem Achsenobjekt. Eine Folge - wie würde ich das Originalbild in ein Achsenobjekt lesen, das in GUIDE erstellt wurde? Da der Code derzeit geschrieben wird, wird das ursprüngliche Achsenobjekt durch das ursprüngliche imshow ersetzt. (Und trotzdem funktioniert der Aufruf von WindowButtonMotion am Anfang.) – Llaves
Ich verstehe nicht wirklich, warum WindowButtonMotion beim Ersetzen der Achsen nicht mehr funktioniert ... Das Originalbild in ein Achsenobjekt lesen: Ich habe es im Kommentar hinterlassen: ' imshow (Einsen (100), 'Eltern', h); '(h ist eine Achse, und Einsen (100) ist die Bildmatrix). – Rotem
Ich versuchte 'imshow (Dateiname, 'Parent', Achsen_Handle)' beim Öffnen des Originalbildes, wobei axes_handle das Handle GUIDE erzeugt. Das Achsenobjekt wird noch ersetzt. Aber das ist mehr eine Verblüffung als ein Problem. Vielen Dank – Llaves