0

作成したハンドルを削除しようとしてhandles.roi1います。

私はすでに関数を使用しようとしましたdelete:

delete(handles.roi1)

しかし、それは私にこのエラーを与えました:

Argument must contain a string. 

私の目的は、作成したことがないようにハンドルを削除することです。

どうすればそれを行うことができるか、何か提案やヒントはありますか?


うまく表現できてなかったのかな…

あるボタンで定義する GUI を実行していますhandles.roi1が、別のボタンでそれを削除したいと考えています。これは、そのボタンで次のことを行うためです。

try a=handles.roi1;
catch
    b=11;

そして、私はそれがに行くことを望みcatchます。を実行しようとしましたhandles = rmfield(handles, 'roi1');が、うまくいきませんでした。

4

2 に答える 2

1

編集: OPによって追加された情報と一致するように回答を書き直しました。

handles.roi1で作成された場合imread:

handles.roi1 = imread('test.jpg');

または、最初に変数にコンテンツを格納してaからコピーを作成しますa(handles.roi1この場合、同じデータの 2 つのコピーがあります)。

a = imread('test.jpg');
handles.roi1 = a;

開いているファイル ハンドルはありません。さらに、ahandles.roi1等しいであり、これらはファイル ハンドルではありませんが、それぞれにグラフィック ファイルのカラーまたはグレースケール イメージが含まれていますtest.jpg(この例の場合)。

MATLAB では通常、 でファイル ハンドルを取得しますが、ファイル ハンドルを使用しないfopenファイル I/O コマンドがいくつかあります。imreadxlsreadfastaread

この場合、 (MATLAB 構文で)roi1構造体のフィールドを削除する必要があるためhandles( handles.roi1MATLAB 構文で)、次のように使用できますrmfield

handles = rmfield(handles, 'roi1');

handlesこれは、フィールドなしでの新しいコピーをroi1と呼ばれる同じ構造体に戻して格納しhandlesます。

これは、ファイル ハンドルやグラフィックス オブジェクト ハンドルとは関係がないことに注意してください。ファイル ハンドル (またはグラフィックス オブジェクト ハンドル) をまったく返さないという事実にもかかわらず、handlesあなたまたは誰かが name と紛らわしい名前を持っていると呼ばれる構造体にすぎません! の代わりに名前を付けたいと思います。それが実際に含まれているからです。handlesimreadimageDatahandles

一方、handles.roi1本当に次のように作成されたファイル ハンドルであった場合fopen:

handles.roi1 = fopen('test.jpg');

この場合、MATLAB に実際に開いているファイル ハンドルがあり、最初に次のfcloseようにファイルを閉じる必要があります。

fclose(handles.roi1);

または、 で開いたすべての開いているファイルを閉じたい場合は、次のようにしますfopen

fclose('all');

次に、( MATLAB 構文で)構造体fcloseのフィールドを削除したい場合は、次の方法を使用できます(の場合と同じ):roi1handleshandles.roi1rmfieldimread

handles = rmfield(handles, 'roi1');

handlesこれは、フィールドなしでの新しいコピーをroi1と呼ばれる同じ構造体に戻して格納しhandlesます。

于 2012-12-26T09:25:29.963 に答える
0

ハンドルの一部だけを削除したい場合は、上記のように実行できます。

rmfield(handles, 'roi1');

ハンドル全体を削除する場合は、次のようにします。

clear handles
于 2012-12-27T12:44:57.930 に答える