如何将图像放在 Matlab uicontrol 按钮上?

Posted

技术标签:

【中文标题】如何将图像放在 Matlab uicontrol 按钮上?【英文标题】:How can I put an image on a Matlab uicontrol button? 【发布时间】:2019-09-21 15:13:19 【问题描述】:

我有 Matlab 2019b、GUI Layout Toolbox 2.3.4,它们都在 MacOs 14 Mojave 上运行。

我想在具有图标/图像而不是文本的 UI 中创建按钮。我在这里看到过:

https://undocumentedmatlab.com/blog/html-support-in-matlab-uicomponents/

应该可以使用 HTML 来呈现按钮内容。

所以 - 我试试这个示例代码:

figure('MenuBar','none','Name','GUI-TEST','NumberTitle','off','Position',[200,200,140,90]);
push_btn = uicontrol('Style','PushButton','String','Push','Position',[30,60,80,20],...
  'CallBack','disp(''You are pressed a push button'')');
close_btn = uicontrol('Style','PushButton','String','Close','Position',[30,5,80,50],...
    'CallBack','close');
icon_file = fullfile(pwd, 'close.png')
str = ['<html><img src="file://' icon_file '"></html>']
set(close_btn,'String',str);

但它给我留下了一个空按钮。

如果我故意使用与现有文件不对应的文件名,我会看到损坏的图像图标:

所以我有理由确定基本语法和文件路径是正确的,但图像没有在按钮中呈现。

我还需要做些什么来完成这项工作,还是这只是 Matlab 压倒性陌生的一部分?

【问题讨论】:

【参考方案1】:

将图像放在 uicontrol(特别是按钮)上的最简单方法是使用 CData 属性,

im_orig = imread(icon_file);  % Needs to be true color, i.e. MxNx3
im_sized = imresize(im_orig,[80,50]); % size of the button
% str = ['<html><img src="file://' icon_file '"></html>'];
% set(close_btn,'String',str);
set(close_btn,'CData',im_sized);

【讨论】:

谢谢。是的,这很好用。你知道为什么 HTML 业务无法渲染图片吗?

以上是关于如何将图像放在 Matlab uicontrol 按钮上?的主要内容,如果未能解决你的问题,请参考以下文章

如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定

Matlab移动图像

UIcontrol 按钮以在 matlab 中绘制工作区中的数据

用户更新后从 Matlab 编辑 uicontrol 中删除光标?

如何将进度条控件添加到 Matlab gui?

Matlab Imppoint 和 Uicontrol