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

Plot speichern, Abfrage über Dialogbox

 

moongoblin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2009, 17:31     Titel: Plot speichern, Abfrage über Dialogbox
  Antworten mit Zitat      
Hallo,

über mein GUI erzeuge ich verschiedene Plots. Dazu gibt es eine Checkbox "save Image". Wenn diese bei Erzeugung des Plots angeklickt ist, soll der Plot abgespeichert werden. Name und Ort sollen optimalerweise über eine Dialogbox erfragt werden.
Wie realisiere ich das korrekt?
Bisher habe ich mit uiputfile und saveas experimentiert, allerdings klappt es nie korrekt. Das Öffnen der Dialogbox klappt meistens noch, aber das Bild wird dann nie mit dem richtigen Namen am richtigen Ort gespeichert.
Code:

% Speicherung ja/nein
handles.value_saveimage=get(handles.checkbox_saveimage, 'Value');
if handles.value_saveimage==1 % wenn Checkbox saveimage an

[file, path]=uiputfile('Image2D','Save Image'); % öffnet Dialogbox mit Titel 'Save Image' und speichert die Figure unter dem Namen Image2D
 
saveas(figure2D,'Image2D','.tif']); %speichert Figure mit dem handle figure2D unter dem Namen Image2D als tif

end
 


Wo liegt der Fehler? Ich vermute ich habe grundsätzlich noch nicht kapiert was ich wie und wohin übergeben muss, um den Plot richtig abzuspeichern.

Danke für jede Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 13:22     Titel:
  Antworten mit Zitat      
Hallo,

wenn Du mit uiputfile den Dateinamen und Pfad bekommst, musst Du auch genau diese Werte an saveas übergeben. Momentan heisst die Datei immer Image2D und liegt im aktuellen Verzeichnis.

Code:

[file, path]=uiputfile('Image2D','Save Image');
saveas(figure2D,[path,file],'tif')
 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 14:24     Titel:
  Antworten mit Zitat      
Perfekt, genau das war Info zur korrekten Übergabe, die mir fehlte!

Besten Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 15:07     Titel:
  Antworten mit Zitat      
Folgefrage:
Bei einer Bilderserie soll das erste Bild wie besprochen per Dialogbox abgespeichert werden. Die anderen Bilder sollen ebenfalls abgespeichert werden, und zwar unter dem gleichen Pfad, mit anderem, aber automatisch generiertem, Namen. Für das Abspeichern der ganzen Serie soll also nur einmal das Dialogfenster geöffnet werden.
Ich habe versucht das wie folgt zu realisieren:
Code:

if handles.value_saveimage==1 && handles.e~=0 % wenn Checkbox saveimage an und Serie
    if i==handles.position % beim ersten Bild
    [file,path]=uiputfile(['Image3D_',num2str(i),'_',handles.filename(9:13) '.tif'],'Save Image'); % öffnet Dialogbox
    saveas(figure3D,[path,file],'tif');
    end
    if i~=handles.position % bei allen Folgebildern
    file=['Image3D_',num2str(i),'_',handles.filename(9:13) '.tif'];
    saveas(figure3D,[path,file],'tif');
    end
end
 


Dies ergibt folgende Fehlermeldung:
"At compilation, "path" was determined to be a variable and this
variable is uninitialized. "path" is also a function name and previous versions
of MATLAB would have called the function.
However, MATLAB 7 forbids the use of the same name in the same
context as both a function and a variable."

Wie kann ich diese Funktionsweise anders bzw. richtig umsetzen?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

wenn Du beim ersten Bild den Dialog aufmachst, musst Du Dir die Variable path für die weitere Verwendung speichern.
Du könntest z.B. die handles structure noch um 1 weiteres Feld erweitern.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 16:45     Titel:
  Antworten mit Zitat      
Jaaa... ok... und wie mach ich das? Rolling Eyes
Sorry für die vermutlich primitive Frage.
Bisheriger Versuch:
Code:

if handles.value_saveimage==1 && handles.e~=0 % wenn Checkbox saveimage an und Serie
    if i==handles.position % beim ersten Bild
    [file,path]=uiputfile(['Image3D_',num2str(i),'_',handles.filename(9:13) '.tif'],'Save Image'); % öffnet Dialogbox
    saveas(figure3D,[path,file],'tif');
    handles.speicherort=path;
    guidata(hObject, handles);
    end
    if i~=handles.position % bei allen Folgebildern
    file=['Image3D_',num2str(i),'_',handles.filename(9:13) '.tif'];
    saveas(figure3D,[handles.speicherort,file],'tif');
    end
end
 


Fehlermeldung:
Reference to non-existent field 'speicherort'
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2009, 10:42     Titel:
  Antworten mit Zitat      
Hallo,

an sich so wie Du es geschrieben hast: Feld hinzufügen und Aufruf von guidata. Hast Du mal den Debugger verwendet um zu sehen was passiert (wird alles in der richtigen Reihenfolge aufgerufen usw?).
Du kannst auch einmal vor dem Zugriff explizit nochmal mit
Code:

handles = guidata(hObject)
 

die aktuellen guidata auslesen und überprüfen ob das Feld dann vorhanden ist.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2010, 10:28     Titel:
  Antworten mit Zitat      
Frohes neues Jahr erstmal... Smile

An dem Problem verzweifle ich aber immernoch, nachdem ich es heute morgen dann nach der Weihnachtspause wieder angefasst habe.

Am Ende der ersten Schleife ist handles. speicherort da (ausgelesen entsprechend deines Hinweises), in der zweiten if-Schleife ist es nicht mehr da.

Meine Überlegungen: Die äußere if-Schleife wird aus einer Funktion aufgerufen, die nur bei der ersten Iteration an der ersten inneren if-Schleife "vorbeikommt", bei allen weiteren Iterationen wird die erste innere if-Schleife ausgelassen und nur die zweite bearbeitet. Ich habe bisher gedacht das ist kein Problem, denn wenn ich bei der ersten Iteration den path in den handles speichere, sollte der doch danach IMMER da sein, oder? Das ist aber offenbar nicht so... ????
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2010, 12:59     Titel:
  Antworten mit Zitat      
Ok, ich weiß zwar immernoch nicht genau warum das so nicht ging, aber ich hab das Problem jetzt gelöst, indem ich den Funktionsablauf umstrukturiert und somit die Variablenübergabe verändert habe. Jetzt geht's! Smile

Danke für die Unterstützung!
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.