2012-04-12 8 views
0

イメージファイルをバイナリファイルに変換しようとしています。ここではMatlab GUIで2つのボタンを使用しています。 、その後ファイルを閲覧するには最初のボタンは、静的なテキスト、CSVファイルとして保存するための第二のボタン上のファイル名を示しており、これは私が使用しようとしている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); 

私のコードです"名前を付けて保存"ボタンをクリックすると、[参照]ボタンから変数を取得できるようになりますが、ファイルを参照した後に[名前を付けて保存]ボタンをクリックすると、何もしません。...

それを誤って使用していますか?

私は、私はそれが何であるかを知らない

??? 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{:}); 

を理解しない私は、この次のエラーを得た@Richanteからの回答を、実行した後...

答えて

1

はい、これはかなり右ではありません。 handlesを使用してデータを保存しないでください - 独自の構造体を使用してください。 OpeningFcnで:

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

その後、あなたは、このデータを取得したい場合(例えばbrowsefile_Callback):

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

buttonwritecsv_Callback

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

基本的には、guidata(hObject, myData)はあなたがmyDataを保存しmyData = guidata(hObject, myData)ができますすることができますあなたはそれを取得します。

+0

大丈夫@リチャンテ、あなたのアドバイスのおかげで、まだいくつかのエラーが表示されます、私はそれを投稿します –

+6

私はこの答えが正しいと思います。私はあなたがハンドル構造を使用したいと思うと信じています。 __ "GUIDEはguidataを使用してハンドル構造体を保存および管理します.Guide GUIコードファイルではハンドル構造体を上書きしないでください。そうでないとGUIが機能しなくなります。GUI以外のデータを格納する必要がある場合ハンドル構造に新しいフィールドを追加して、そこにデータを安全に配置することができます」__ – wherestheforce

+0

力を弱める、絶対に正しい。 – Shaun314

関連する問題