在Matlab GUI上锁定图像大小

时间:2012-07-16 11:33:02

标签: matlab user-interface video matlab-figure

我在MatLab中制作一个GUI,要求用户上传视频文件。 接下来我想在具有固定窗口大小的轴上播放它。但是,如果上传的文件很大,Matlab将扩展轴并接管我的大部分GUI。有没有办法缩小图像以使其适合轴?

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果图像太大,通常不会改变Matlab轴的位置。

我可以想到两个可能的问题:

  1. 轴从一开始就很大,但如果图像足够小,则显示带有边距的小图像
  2. 显示您正在使用的图像的命令是自定义的,它会更改轴的大小。

答案 1 :(得分:0)

这个问题已经过时了,但我偶然发现了这个问题(寻找其他的东西)所以也许它会帮助别人看到我做了什么。

我想调整相当大的图像(1024x 100k-200k像素),以便我的GUI可以在这些大型数据集的视图上快速演示各种颜色操作。我只是手动对我的数据进行子采样,如下所示(下面的功能)。

请注意,此示例是一张图片。为了对视频进行空间子采样,我已经浏览了整个视频,并在每个帧上做了类似的事情。

[plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(handles.figure1, handles.axes1);

[nSamplesPerLine nLines] = size(iqData);
colInds = decimateToNumber(nLines,plotWidthPixels);
rowInds = decimateToNumber(nSamplesPerLine,plotHeightPixels);
iqDataToPlot = iqData(rowInds,colInds);

首先,我得到了轴大小,以像素为单位:

function  [plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(figHandle, axisHandle)
set(figHandle,'Units','pixels')
figSizePix = get(figHandle,'Position');

set(axisHandle,'Units','normalized')
axSizeNorm = get(axisHandle,'Position');

axisSizePix = figSizePix.*axSizeNorm;
plotWidthPixels = ceil(axisSizePix(3)-axisSizePix(1));
plotHeightPixels = ceil(axisSizePix(4)-axisSizePix(2));

然后我用它来通过获得(粗略地)均匀间隔的索引子集来抽取图像的宽度和高度:

function inds = decimateToNumber(lengthOfInitialVector, desiredVectorLength, initialIndex)
if nargin < 3
    initialIndex = 1;
end

if (lengthOfInitialVector-initialIndex+1) > desiredVectorLength*2
    inds = round(linspace(initialIndex,lengthOfInitialVector,desiredVectorLength));
else
    inds = initialIndex:lengthOfInitialVector;
end