2012-07-16 61 views
2

我正在MatLab中製作一個GUI,要求用戶上傳視頻文件。 接下來我想用固定窗口大小的軸來播放它。但是,如果上傳的文件很大,Matlab將擴展軸並接管我的大部分GUI。有沒有辦法縮小圖像使其適合座標軸?在Matlab GUI上鎖定圖像大小

有誰知道如何解決這個問題?

回答

0

通常如果圖像太大,Matlab座標軸不應該改變它們的位置。

我能想到的兩個可能的問題:

  1. 軸線從一開始就大,但表現出的小圖像帶空白如果圖像是足夠小
  2. 證明你是圖像的命令使用是自定義的,它改變了軸的尺寸。
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