2012-04-12 12 views
0

Ich versuche, eine Bilddatei in eine binäre Datei zu konvertieren, wo ich 2 Tasten in Matlab GUI. die erste Schaltfläche die Dateien dann zeigt die Dateinamen auf einem statischen Text und die zweite Schaltfläche für das Speichern als CSV-Datei zu suchen, und das ist mein CodeWie übergibt man Werte zwischen Funktionen in MATLAB GUI?

function varargout = signatureGUI(varargin) 
% Begin initialization code - DO NOT EDIT 
gui_Singleton = 1; 
gui_State = struct('gui_Name',  mfilename, ... 
       'gui_Singleton', gui_Singleton, ... 
       'gui_OpeningFcn', @signatureGUI_OpeningFcn, ... 
       'gui_OutputFcn', @signatureGUI_OutputFcn, ... 
       'gui_LayoutFcn', [] , ... 
       'gui_Callback', []); 
if nargin && ischar(varargin{1}) 
gui_State.gui_Callback = str2func(varargin{1}); 
end 

if nargout 
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
else 
gui_mainfcn(gui_State, varargin{:}); 
end 
% End initialization code - DO NOT EDIT 



% --- Executes just before signatureGUI is made visible. 
function signatureGUI_OpeningFcn(hObject, eventdata, handles, varargin) 

handles.output = hObject; 
handles.filename = 0; 

guidata(hObject, handles); 



% --- Outputs from this function are returned to the command line. 
function varargout = signatureGUI_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output; 



% --- Executes on button press in browsefile. 
function browsefile_Callback(hObject, eventdata, handles) 

filename = uigetfile({'*.jpg'; '*.jpeg'; '*.png'}); 

handles.filename=filename; 
guidata(hObject, handles); 

set(handles.showfile, 'String',filename); 



% --- Executes on button press in buttonwritecsv. 
function buttonwritecsv_Callback(hObject, eventdata, handles) 

handles.filename; 

    new = imread (filename); 
    newrgb=rgb2gray(new); 
    newrgb_io = binz(newrgb); 

    [filecsv,pathcsv] = uiputfile('*.csv','Save CSV File'); 
    csvwrite([filecsv,pathcsv], newrgb_io); 

guidata(hObject, handles); 

Ich versuche, das zu verwenden, "handles.filename", damit die Schaltfläche "Save As" die Variable über die Schaltfläche "Durchsuchen" abrufen kann, aber wenn ich nach dem Durchsuchen auf die Schaltfläche "Speichern unter" klicke, wird nichts unternommen ...

Fehle ich etwas? oder einen Fehler machen?

Nachdem ich die Antwort von @Richante folge mir diese folgende Fehlermeldung anzeigt, die ich nicht verstehen,

??? Reference to non-existent field 'output'. 

Error in ==> signatureGUI>signatureGUI_OutputFcn at 34 
varargout{1} = handles.output; 

Error in ==> gui_mainfcn at 265 
     feval(gui_State.gui_OutputFcn, gui_hFigure, [], 
     gui_Handles); 

Error in ==> signatureGUI at 17 
    gui_mainfcn(gui_State, varargin{:}); 

Ich weiß nicht, was es ist ..

Antwort

1

Ja, das ist nicht ganz richtig. Verwenden Sie nicht handles, um die Daten zu speichern - Verwenden Sie Ihre eigene Struktur. In OpeningFcn:

myData.filename = []; 
guidata(hObject, myData); 

Dann, wenn Sie diese Daten abrufen möchten (zB browsefile_Callback):

... 
myData = guidata(hObject); 
myData.filename = uigetfile(...); 
set(handles.showfile, 'String', filename); 

und buttonwritecsv_Callback:

myData = guidata(hObject); 
new = imread(myData.filename); 
... 

Grundsätzlich guidata(hObject, myData) ermöglicht das Speichern von myData und myData = guidata(hObject, myData) lässt Sie holen es ab.

+0

in Ordnung @Richante, vielen Dank für Ihre beraten, aber ich habe noch einige Fehler, ich werde es –

+6

Post Ich denke, diese Antwort richtig ist. Ich glaube, dass Sie die Griffstruktur verwenden möchten. MATLAB Dokumentation Zustände, __ "GUIDE verwendet guidata die Griffe Struktur zu speichern und zu pflegen. In einer GUIDE GUI-Code-Datei nicht überschreiben die Griffe Struktur oder Ihre GUI funktioniert nicht mehr. Wenn Sie andere Daten als Griffe für Ihre GUI speichern müssen können Sie neue Felder in die Griffe Struktur hinzufügen und Ihre Daten sicher dort platzieren. "__ – wherestheforce

+0

Wheres die Kraft, Ihre absolut richtig. – Shaun314