在 MATLAB 中向新图窗添加按钮

问题描述 投票:0回答:1

下面的应用程序允许我用按钮打开一个图形。当我单击按钮时,回调会生成一个带有 imagesc 图的新图形。我希望能够向 imagesc 图添加另一个按钮,这样我就可以有一个回调,允许我将绘图保存为 png。

这是我的应用程序代码:

function plotApp
fig = uifigure;

fig.Position(3:4) = [300 180];
uibutton(fig, ...
    "Text","Plot Data", ...
    "ButtonPushedFcn", @(src,event) plotButtonPushed);

end

function plotButtonPushed(~)
% get data from workspace
v = evalin('base','data');

imagesc(v(:,:,1));% show image     
roi=drawpolyline; % pick points to create improfile
xy= roi.Position; % get xy data

%cx is the x-coordinate values, c is the sampled pixel intensities
[cx,~,c] = improfile(v,xy(:,1),xy(:,2));
assignin("base","cx",cx);
assignin("base","c",c);
axes('position',[.6 .2 .3 .3]);  % create small window
line(cx,c(:,1,1),'color','r')    % plot red channel
line(cx,c(:,1,2),'color','g')    % plot green channel
line(cx,c(:,1,3),'color','b')    % plot blue channel
end

这是第一个带有按钮的图形:

enter image description here

这是我想要放置新按钮的图形:

enter image description here

如何向 imagesc 图中添加新的按钮?

matlab plot figure
1个回答
0
投票

您需要新人物的句柄,然后将按钮放在其上。可能是这样的:

function plotButtonPushed(~)
% get data from workspace
v = evalin('base','data');

newFigHandle = uifigure;    %Create new figure
ax = axes(newFigHandle);    %Create axis on figure 

imgHandle = imagesc(ax, v(:,:,1)); %show image     

%Create new push button
uibutton(newFigHandle, ...
    "Text","Save Plot", ...
    "ButtonPushedFcn", @(src,evt,image) savePlotBushed(src,evt,imgHandle));

roi=drawpolyline; % pick points to create improfile
...

保存绘图功能可以如下所示:

function savePlotBushed(~,~,imgHandle)
imwrite(uint8(rescale(imgHandle.CData,0,2^8-1)),'C:\test.png')
end

如果您不仅想保存由 imagesc 创建的图像,还想保存新图中的其余部分,我建议您使用 getframe() 或很棒的 export_fig 工具箱,在 GitHub 上免费。

© www.soinside.com 2019 - 2024. All rights reserved.