我正在尝试删除我创建的句柄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');,但没有成功。
发布于 2012-12-26 09:25:29
编辑:重写了答案,以匹配OP添加的信息。
如果handles.roi1是用imread创建的
handles.roi1 = imread('test.jpg');或者,首先将内容存储在变量a中,然后将a的副本存储到handles.roi1中(在本例中,相同数据的副本有2个):
a = imread('test.jpg');
handles.roi1 = a;然后是,没有打开的文件句柄。此外,a和handles.roi1是相等的,它们不是文件句柄,但它们都包含图形文件test.jpg的颜色或灰度图像(在本例中)。
在MATLAB中,通常使用fopen获得文件句柄,但是有几个文件I/O命令可以执行而不是使用文件句柄,例如imread、xlsread和fastaread不使用文件句柄。
在这种情况下,您想要的(我假设)是去掉struct handles ( MATLAB语法中的handles.roi1)的字段handles.roi1,这样您就可以这样使用rmfield了:
handles = rmfield(handles, 'roi1');它将handles的新副本存储在没有字段roi1的情况下,返回到名为handles的相同结构中。
请注意,这与文件句柄或图形对象句柄无关。这只是一个名为handles的结构,您或某个人的名称与名称handles混淆,尽管imread根本不返回任何文件句柄(或图形对象句柄)!我宁愿将它命名为imageData而不是handles,因为这才是它真正包含的内容。
另一方面,如果handles.roi1确实是用fopen创建的文件句柄,如下所示:
handles.roi1 = fopen('test.jpg');在这种情况下,您将在MATLAB中拥有一个真正打开的文件句柄,您应该首先使用fclose关闭文件,如下所示:
fclose(handles.roi1);或者,如果您想关闭用fopen打开的所有打开的文件
fclose('all');然后,在fclose之后,当您想要去掉struct handles的字段roi1 ( MATLAB语法中的handles.roi1)时,可以这样使用rmfield (与imread的情况相同):
handles = rmfield(handles, 'roi1');它将handles的新副本存储在没有字段roi1的情况下,返回到名为handles的相同结构中。
发布于 2012-12-27 12:44:57
如果您只想删除部分句柄,您可以如上所述:
rmfield(handles, 'roi1');如果要删除整个句柄,可以执行以下操作:
clear handleshttps://stackoverflow.com/questions/14036143
复制相似问题