0

画像ファイルをバイナリ ファイルに変換しようとしています。ここでは、Matlab GUI で 2 つのボタンを使用しています。ファイルを参照するための最初のボタンは、静的テキストにファイル名を表示し、CSV ファイルとして保存するための 2 番目のボタンです。これが私のコードです。

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);

「handles.filename」を使用して、[名前を付けて保存] ボタンが [参照] ボタンから変数を取得できるようにしようとしていますが、ファイルを参照した後に [名前を付けて保存] ボタンをクリックしても何もしません...

私は何かが欠けているか、それを使用する際に間違いを犯していますか?

@Richanteからの回答に従った後、次のエラーが発生しましたが、わかりません

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

私はそれが何であるかわからない..

4

1 に答える 1

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)保存myDatamyData = guidata(hObject, myData)て取得できます。

于 2012-04-12T18:27:49.187 に答える