我正在尝试删除我创建的句柄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');
,但它不起作用。
答案 0 :(得分:1)
编辑:重写了与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
,{ {1}}和xlsread
不使用文件句柄。
在这种情况下你想要的(我假设)是摆脱结构fastaread
的字段roi1
(MATLAB语法中的handles
),这样你就可以使用{{ 1}}这样:
handles.roi1
将rmfield
的新副本存储为handles = rmfield(handles, 'roi1');
,而不将字段handles
存储回名为roi1
的同一个结构中。
请注意,这与文件句柄或图形对象句柄无关。它只是一个名为handles
的结构,你或某人的名字令人困惑,名字为handles
,尽管handles
根本没有返回任何文件句柄(也没有图形对象句柄)!我宁愿将其命名为imread
而不是imageData
,因为这就是它真正包含的内容。
另一方面,如果handles
确实是使用handles.roi1
创建的文件句柄,那么:
fopen
在这种情况下,您将在MATLAB中拥有一个真正的打开文件句柄,您应该首先使用handles.roi1 = fopen('test.jpg');
关闭该文件,如下所示:
fclose
或者,如果您要关闭使用fclose(handles.roi1);
打开的所有打开文件:
fopen
然后,在fclose('all');
之后,您想要删除结构fclose
(MATLAB语法中的roi1
)的字段handles
,您可以使用{{ 1}}这种方式(与handles.roi1
的情况相同):
rmfield
将imread
的新副本存储为handles = rmfield(handles, 'roi1');
,而不将字段handles
存储回名为roi1
的同一个结构中。
答案 1 :(得分:0)
如果你只想删除句柄的一部分,你可以按照上面提到的那样做:
rmfield(handles, 'roi1');
如果要删除整个句柄,可以执行以下操作:
clear handles