How can I put images in a table using gui?

조회 수: 21 (최근 30일)
Zainab Riyadh
Zainab Riyadh 2023년 4월 6일
편집: Image Analyst 2025년 11월 22일 23:26
I need to create a table in matlab/gui where I have to put images in the first column of the table. Is that possible? I searched a lot for a code to help me but I couldn't find any.

채택된 답변

Adam Danz
Adam Danz 2023년 4월 7일
편집: Adam Danz 2023년 4월 7일
Here's a demo that embeds images in cells of a uitable but as @Walter Roberson mentioned, the image size will be small, and the aspect ratio may change since all icons are the same size.
uistyle is used to create icons from the images and addStyle is used to place the images in the uitable cells.
% 1. Create a demo table of images
images = ["circle.jpg" "clock.jpg" "catherine.jpg" "hexagon.jpg", "laure.jpg", "pearswtx.jpg" "star.jpg" "triangle.jpg"];
T = table('Size',[numel(images),5], ...
'VariableTypes',["string" "string" "double" "double" "double"], ...
'VariableNames',["Image" "Format" "BitDepth" "Width" "Height"]);
T.Image = images(:);
for i = 1:numel(images)
info = imfinfo(T.Image(i));
T.Format(i) = info.Format;
T.BitDepth(i) = info.BitDepth;
T.Width(i) = info.Width;
T.Height(i) = info.Height;
end
% 2. Create the uitable and embed images in column 1.
fig = uifigure;
uit = uitable(fig,"Data",T, ...
'Units','normalized', ...
'Position',[.05 .05 .9 .9], ...
'FontSize', 16);
for i = 1:height(T)
imgStyle = uistyle("Icon",T.Image(i));
addStyle(uit, imgStyle, 'cell', [i,1])
end
  댓글 수: 16
Zainab Riyadh
Zainab Riyadh 2023년 4월 26일
편집: Zainab Riyadh 2023년 4월 26일
Hello Mr @Adam Danz
Is there a way to save the uifigure as an excel file instead of pdf? I have a uifigure similar to what you have shared in test.pdf
Sean de Wolski
Sean de Wolski 2025년 11월 18일
@Adam - Is there a way to put multiple icons/images in a cell?
I have a bunch of modifiers that apply to a row of a table (think like a git interface where you have add/delete/modified/stale etc.). I'd like to add the relevant ones for each row. Using uistyle(Icon...) seems to only add one and overwrite (even if Alignment is left/right). uistyle(Interpreter="html") does not seem to render images (it shows the missing icon regardless of path management). The uistyle doc does say the <img> tag is unsupported.
d = addvars(array2table(magic(3)), strings(3,1), 'NewVariableNames', {'modifiers'}, 'Before', 1);
report_24 = ['file:' which('report_24.png')]; % on path; file:/ from https://undocumentedmatlab.com/articles/images-in-matlab-uicontrols-and-labels
edit_icon = 'edit_icon.png'; % pwd
d.modifiers(1) = ['<html><body><img src="' report_24 '"><img src="' edit_icon '"></body></html>'];
warningicon = which('warning_16.png'); % no file:
d.modifiers(3) = ['<img src="' warningicon '">'];
t = uitable(uifigure, Data=d);
addStyle(t, uistyle(Interpreter="html"), "column", 1)
The only thing I've been able to figure out is to manually combine the icons and concatenate the image but the combinatorics of that are kinda ugly.
It's been awhile, hope all is well!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2023년 4월 6일
If you use traditional figures with traditional uitable() objects, then Yes, it is possible.
What you do in such cases is use a cell array of character vectors, and set each one to be HTML, such as
D{2,5} = '<HTMTL><IMG source="http://SOMEURL">'
However.... it is difficult to adjust the size of the cells. You can adjust column width, but column height is going to be automatically determined to be equivalent to one line in the text font (the scanner is just going to see text, not understanding that it is going to activate something.) So you can effectively only get fairly small images, on the order of 10-ish pixels high.
If you are using uifigure() with newer uitable() then there might be additional possibilities.

Image Analyst
Image Analyst 2023년 4월 7일
편집: Image Analyst 2025년 11월 22일 23:26

카테고리

Help CenterFile Exchange에서 Develop uifigure-Based Apps에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by