Verfasst am: 21.12.2009, 17:31
Titel: Plot speichern, Abfrage über Dialogbox
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
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.
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?
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.
Jaaa... ok... und wie mach ich das?
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
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
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... ????
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!
Danke für die Unterstützung!
Einstellungen und Berechtigungen
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
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.