在matlab

时间:2016-02-06 14:24:51

标签: matlab user-interface matlab-figure matlab-guide

我已经开发了一个GUI浏览mat文件并在matlab中绘制图表现在我想使用GUI中的保存按钮将这些图保存为图像

我将保存回调函数编码为

[file,path]=uiputfile({'*.bmp','BMP'},'Save Image As');
f=getframe(handles.axes);
[x,map]=frame2im(f); 
imwrite(x,fullfile(path, file),'bmp');

但是这段代码只给了我没有标记轴的图形。

有人建议我使用explore_fig,但我无法将其用于我的目的

如果我想将GUI的特定区域保存为图像,我应该使用哪些代码

由于

1 个答案:

答案 0 :(得分:0)

正如您所注意到的那样,使用getframe它只能抓取轴的内容而不再使用它。为了标记轴,您可以利用轴的TightInset属性来查找轴的边界矩形。 TightInset是添加到轴Position的边距,以便为标签腾出空间。

此外,您可以利用getframe的第二个输入来指定要抓取的矩形(以像素为单位)。您可以使用hgconvertunits(未记录)来计算此内容。

% Position INCLUDING labels/ticks
position = get(hax, 'Position');
inset = get(hax, 'TightInset');
outerpos = [position(1:2) - inset(1:2), position(3:4) + inset(3:4)];

% Ensure that the units are PIXELS
rect = hgconvertunits(hfig, outerpos, get(hax1, 'Units'), 'pixels', hfig);

% Grab only the specified rectangle from the figure
im = getframe(hfig, rect);

如果我们对某些样本数据执行此操作

% Load Sample Data
load mri
img = squeeze(D(:,:,12));

% Display axes in middle of figure
hfig = figure();
hax = axes('Position', [0.2 0.2 0.5 0.5]);
imagesc(img);
xlabel('columns');
ylabel('rows');
axis image;

原件看起来像这样

enter image description here

带有rect的getframe的结果是

enter image description here