我们能在MATLAB中展示原始大小的图片吗?
目前,当我们展示图片时,它会自适应于窗口大小。然而,我想展示图片的原始大小。当图片比较大时,应该在图片窗口中出现滚动条。这将允许用户查看图片的原始大小。
有什么办法可以实现这个功能吗?这是否可行?
'Units'
:可以设置为'inches'
、'centimeters'
或'pixels'
等。'Position'
:控制坐标轴在图形窗口中的位置,单位由'Units'
属性控制。'DataAspectRatio'/'PlotBoxAspectRatio'
:这些控制坐标轴和周围绘图框的相对缩放。'XLim'/'YLim'
:坐标轴的最小值和最大值。在获得所需大小和缩放的图像后,部分图像可能位于图形窗口区域之外。不幸的是,水平和垂直滑块将不会自动添加。您需要使用UICONTROL函数自己创建这些滑块控件。您需要编写回调函数,以便滑块控件可以将坐标轴移动到窗口中。
如果您选择走上面提到的道路,这里有一些GUI设计教程链接可能会对您有帮助:一个关于闪电匕首滑块的教程, Doug Hull的博客文章, 以及 Doug关于GUIDE基础知识的视频。Matlab滑块存在一个问题,它只在MouseUp时触发回调而不是在MouseMove上触发,因此纯Matlab实现总会感觉奇怪。
更好的方法-使用Matlab中的Java。因此,您无需重新实现整个滚动逻辑。您可以将Java Swing GUI组件放置在Matlab窗口中,这并不难。
具体来说,您必须使用Swing JScrollPane
类。使用Matlab javacomponent()
函数,您可以将其放置在Matlab窗口中。
网络上有大量关于如何将图像放入滚动窗格的示例,只需浏览JScrollPane image
即可。您可以使用通常的Matlab语法在Matlab中使用Java类(无需new
关键字等)。
% Create a scroll panel with a Magnification Box and an Overview tool.
hFig = figure('Toolbar','none',...
'Menubar','none');
hIm = imshow('saturn.png');
hSP = imscrollpanel(hFig,hIm); % Handle to scroll panel.
set(hSP,'Units','normalized',...
'Position',[0 .1 1 .9])
% Add a Magnification Box and an Overview tool.
hMagBox = immagbox(hFig,hIm);
pos = get(hMagBox,'Position');
set(hMagBox,'Position',[0 0 pos(3) pos(4)])
imoverview(hIm)
(论坛帖子链接)
为了以原始大小(1:1)显示图像,需要注意以下3个方面:
一旦所有这些都根据图像大小设置好,即使使用MATLAB的image()
函数,也可以生成1:1的图像显示。
以下是示例代码:
%% Load Data
mI = imread('7572939538_04e373d8f4_z.jpg');
numRows = size(mI, 1);
numCols = size(mI, 2);
%% Setings
horMargin = 30;
verMargin = 60; %<! Title requires more
%% Display Image
vFigPos = [100, 100, numCols + (2 * horMargin), numRows + (2 * verMargin)]; %<! [Left, Bottom, Width, Height]
vAxesPos = [horMargin, verMargin, numCols, numRows];
hFigure = figure('Position', vFigPos, 'Units', 'pixels');
hAxes = axes('Units', 'pixels', 'Position', vAxesPos);
hImageObj = image(hAxes, mI);
set(hAxes, 'DataAspectRatio', [1, 1, 1]);
set(get(hAxes, 'Title'), 'String', {['Landscape by Roman Vanur']}, ...
'Fontsize', fontSizeTitle);
set(hAxes, 'XTick', []);
set(hAxes, 'YTick', []);
结果(基于图片 - Roman Vanur的风景):