WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bilder nebeneinander anordnen

 

MatlabErlerner
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2015, 09:40     Titel: Bilder nebeneinander anordnen
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem. Und zwar bin ich aktuell an der GUI-Programmierung dran. Ich möchte über zwei Pop-Up-Menüs jeweils Bilder auswählen (im ersten entweder ein Bild von einem Elefanten oder von einem Frosch, im zweiten entweder ein Bild von einer Biene oder von einer Ente). Das ausgewählte Bild aus dem ersten Pop-Up-Menü soll als erstes Bild in einer axes dargestellt werden. Das ausgewählte Bild aus dem zweiten Pop-Up-Menü soll dann direkt neben dem ersten ausgewählten Bild angeordnet werden. Jetzt ist meine Frage, wie ich dies realisiere. Bisher habe ich lediglich in den Callback-Functions die Auswahlkriterien geschrieben:

Code:
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1
Text zur ausgewählten Nummer des Eintrags
switch (str{val})
    case 'Elefant'
       
    case 'Frosch'
       
end
guidata(hObject, handles);

function popupmenu2_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu2
Text zur ausgewählten Nummer des Eintrags
switch (str{val})
    case 'Biene'
       
    case 'Ente'
       
end
guidata(hObject, handles);
 


Wie muss nun der Code lautet, damit die oben von mir beschriebene Anordnung der Bilder realisiert werden kann?

Vielen Dank im Voraus für eure Hilfe

Max

P.S. Anbei habe ich noch ein Screenshot von der Gui gehängt

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]

Bilder anordnen.jpg
 Beschreibung:

Download
 Dateiname:  Bilder anordnen.jpg
 Dateigröße:  183.14 KB
 Heruntergeladen:  548 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.06.2015, 13:18     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Bilder nebeneinander angeordnet werden sollen, dann mach doch im Layout zwei Koordinatensysteme.

Die Hints in den vorgefertigten Callback-Kommentaren sagen dir ja schon, wie du an die Informationen herankommst.

Bei Verwendung des image-Befehls darauf achten, dass das Bild im richtigen Koordinatensystem angezeigt wird, z.B.
Code:
image(..., 'parent', handles.axes1)
axis(handles.axes1, 'off')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2015, 08:58     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Harald Smile

Ich habe das aneinanderfügen jetzt wie folgt gelöst:

Code:
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to pum1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Hints: contents = cellstr(get(hObject,'String')) returns pum1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from pum1
A = imread('Elefant.jpg')
B = imread('Frosch.jpg')
% Nummer des ausgewählten Menü-Eintrags
val = get(handles.popupmenu1, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu1, 'String');
% Text zur ausgewählten Nummer des Eintrags
switch (str{val})
    case 'Elefant'
        axes(handles.axes1);
        image(A);
        handles.bild1 = A;
        axis image;
        axis off;
    case 'Frosch'
        axes(handles.axes1);
        image(B);
        handles.bild1 = B;
        axis image;
        axis off;
end
guidata(hObject, handles);

function popupmenu2_Callback(hObject, eventdata, handles)
% hObject    handle to pum1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Hints: contents = cellstr(get(hObject,'String')) returns pum1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from pum1
A = imread('Biene.jpg')
B = imread('Frosch.jpg')
C = imread('Biene.jpg')
D = imread('Ente.jpg')
% Nummer des ausgewählten Menü-Eintrags
val = get(handles.popupmenu2, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu2, 'String');
% Text zur ausgewählten Nummer des Eintrags
switch (str{val})
    case 'Biene'
      axes(handles.axes1);
handles.bild2 = horzcat(handles.bild1,C);
image(C);
      axis image;
      axis off;
    case 'Ente'
       axes(handles.axes1);
 handles.bild2 = horzcat(handles.bild1,D);
       image(B);
       axis image;
       axis off;
end
guidata(hObject, handles);
 


Das Problem war, dass ich die Bilder nur über eine hotrizontale Addition der Matrizen der einzelnen Bilder zusammenfügen konnte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2015, 10:10     Titel:
  Antworten mit Zitat      
Hallo,

ein Vorschlag hinsichtlich Performance wäre, wirklich nur die Bilder zu laden, die du anzeigen willst.
Noch besser wäre es, wenn du die Bilder einmalig lädst und als Anwendungsdaten hinterlegst:
http://de.mathworks.com/help/matlab.....data-among-callbacks.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2015, 09:55     Titel:
  Antworten mit Zitat      
Danke für den Tipp Harald! Denn genau die Preformance ist ein Problem bei meiner Lösung. Allerdings verstehe/weiß ich nicht genau, wie ich das ganze anders lösen könnte. Ich steige bei dem Link, den du mir geschickt hast, nicht so ganz durch. Könntest du es mir vllt. anhand eines Beispiels oder optimalerweise anhand meines Beispiels erklären?

Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2015, 09:59     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit wäre, in der Opening Function alle Bilder zu laden:
Code:
setappdata(handles.figure1, 'BildA', imread('Elefant.jpg'))


Wenn Bild A angezeigt werden soll:
Code:
Bild = getappdata(handles.figure1, 'BildA');
image(Bild)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2015, 10:31     Titel:
  Antworten mit Zitat      
Vielen Dank für die sehr flotte Antwort Harald.
Ich glaube, ich habe es dank deiner Ausführungen verstanden. Ich werde es gleich mal ausprobieren.
Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.