2

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

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

4

2 回答 2

0

如果图像太大,通常 Matlab 轴不应该改变它们的位置。

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

  1. 轴从一开始就很大,但如果图像足够小,则显示带有边距的小图像
  2. 显示您正在使用的图像的命令是自定义的,它会更改轴大小。
于 2012-07-16T11:47:20.303 回答
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
于 2013-08-16T14:47:17.653 回答