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

Axes aus GUI als Bild speichern--> Axenbeschriftung fehlt

 

madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 16.05.2012, 09:15     Titel: Axes aus GUI als Bild speichern--> Axenbeschriftung fehlt
  Antworten mit Zitat      
Hallo zusammen,

ich bin Matlab-Neuling und habe versucht eine Axis meiner GUI als Bild abzuspeichern. Dazu nutze ich uiputfile und anschließend getframe und imwrite. Ich dachte bisher immer, dass ich mit dem handle.axes1 das komplette "Axes" mit Beschriftungen, Skalierungen und eben alles was dazu gehört anspreche. Das scheint aber nicht der Fall zu sein. Ich bekomme zwar ein Bild, die Beschriftungen werden aber nicht mit kopiert.

Code:

% --- Executes on button press in save_button.
function save_button_Callback(hObject, eventdata, handles)
% hObject    handle to save_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename, filepath] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
          '*.*','All Files' },'Save Image',...
          'C:\Work\newfile.jpg');
frame = getframe(handles.axes1);
I = frame2im(frame);
imwrite(I,[filepath, filename]);
 


habe mir mal diesen Post angeschaut: http://www.gomatlab.de/imsave-gui-a.....age-speichern-t20479.html

aber konnte mir nicht direkt weiter helfen. Ich glaube mir fehlt in Moment der Blick dafür, das auf mein Problem zu übertragen.
Wie bekomme ich die Axenbeschriftung für x und y mit in mein Bild?
Bin Dankbar für Denkanstöße oder Lösungsansätze!


Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.05.2012, 12:38     Titel: Re: Axes aus GUI als Bild speichern--> Axenbeschriftung f
  Antworten mit Zitat      
Hallo madlab,

Wenn Du die Umgebung um die AXES herum mitkopieren möchtest, würde ich den FIGURE Handle in GETFRAME verwenden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 16.05.2012, 13:32     Titel:
  Antworten mit Zitat      
Hi Jan,

danke für deine Antwort. Hab das mit den Figure-Handle ausprobiert. Ich kopiere damit komplette oberfläche meiner GUI.
Ich suche etwas, was mir nur die Grafik innerhalb meiner GUI samt Achsenbeschriftung ausspuckt.
Ich habe noch ein bisschen im Forum gestöbert und unter folgendem Link noch das gefunden:
http://www.gomatlab.de/plot-direkt-.....r-gui-speichern-t658.html

Hier wird eine neue figure erzeugt und unsichtbar gemacht. müsste das nicht auch ähnlich mit der axes1 direkt in meiner GUI funktionieren? Sorry wenn die Frage etwas doof gestellt ist, ich versteh nur leider noch nicht so ganz wieso dieses Handle auf mein axes1 nicht die Achsenbeschriftung beinhaltet oder wie ich die Achsen ansprechen kann Embarassed

Das beschriften und Plotten meiner Axes mache ich in einer anderen Button Callback wie folgt:

Code:

handles.axes1 =plot(Matrix(1,:),Matrix(2,:));
ylabel('y-Achsenbeschriftung');
xlabel('x-Achsenbeschriftung');


Ich glaube mir fehlt nicht mehr viel um es so hin zu bekommen wie ich es mir vorstelle aber ich komm in Moment leider nicht drauf.
Ich hoffe es gibt noch einen Vorschlag Smile

Grüße Mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.05.2012, 23:32     Titel:
  Antworten mit Zitat      
Hallo madlab,
Zitat:
Code:
handles.axes1 = plot(Matrix(1,:),Matrix(2,:));

Der PLOT-Befehl gibt nicht den Handle des AXES-Objektes zurück. Besser:
Code:
handles.plot1 = plot(Matrix(1,:),Matrix(2,:));
handles.axes1 = ancestor(handles.plot1, 'axes');

Entweder hilt dies schon weiter, oder Du kannst GETFRAME noch mit dem RECT Argument aufrufen (siehe "help getframe"), wobei "get(handles.axes1, 'OuterPosition')" hilfreich sein könnte.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 21.05.2012, 10:06     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke für den Hinweis, du hast mich auf die richtige Spur gebracht.
Ich habe das mit 'OuterPosition'versucht. Es hat so weit funktioniert, nur leider auch noch immer einen Teil außerhalt der GUI mit ausgeschnitten (warscheinlich weil die Grafik am Rand der GUI liegt).
Ich habe es jetzt 'Position' und 'TightInset' als RECT argument and getframe übergeben. Diese Lösung finde ich zwar nicht so hübsch, da ich eine Zwischenrechnung machen muss, aber sie tut was ich wollte.
So sieht es jetzt aus:

Code:

set(handles.axes1,'units','pixels');
pos1 = get(handles.axes1,'Position'); %left, bottom, width, height
pos2 = get(handles.axes1,'TightInset'); %left, bottom, right, top
pos = [pos1(1)-pos2(1) pos1(2)-pos2(2) pos1(3)+pos2(1)+pos2(3) pos1(4)+pos2(2)+pos2(4)];
frame = getframe(gcf,pos);
imwrite(frame.cdata,[filepath, filename]);


Schade, dass ich es nicht mit einem einzigen get und ohne die Zwischenrechnung hinbekommen habe aber naja jetzt tut es immerhin Smile
Vielen Dank nochmal für deine Hilfe!

Grüße Mad
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.