2014-10-07 71 views
0

我是一個MatLab新手,所以提前道歉...奇怪的是,我沒有找到很多網上幫助。我想將時間序列圖繪製爲電影,隨着時間的推移會顯示一個窗口。在某一特定時刻,它會顯示該時刻的情節,並在幾秒鐘之前和之後顯示。隨着時間的推移渲染陰謀作爲窗口

我想這段代碼之類的數據,sampRate等先前已經被定義爲:在與錯誤

使用錯誤capturescreen

的writeVideo

index = (1:nSamples)/sampRate + startTimeSec; 

figure('name',fileName); 
title('Seismic'); 
plot(index,data,'r*'); 

writerObj = VideoWriter('c:\temp\movie.avi'); 
open(writerObj); 

fig = figure('name',fileName); 
title('Seismic'); 
window = 200; %samples 
for i=1:nSamples 
    first = max([i-window/2,1]); 
    last = min([i+window/2,nSamples]); 
    clf; 
    plot(index(first:last),data(first:last),'r*'); 
    writeVideo(writerObj,getframe(fig)); 
end 
close(writerObj); 

它炸彈傳遞給getframe的矩形必須至少部分位於屏幕上

getf RAME(線105)

x=builtin('capturescreen', varargin{:}); 

錯誤PlotData(線60)

writeVideo(writerObj,的getFrame(圖));

我在做什麼錯?

回答

0

爲什麼你需要clf命令? getframe的文檔讀取「getframe返回一個電影幀,該幀是當前軸的快照。」你的clf命令擺脫了圖中的軸,因此出現了錯誤。刪除clf,它應該工作!

+0

我不認爲這是問題所在。仔細閱讀錯誤信息。它說框架必須**部分**在屏幕上。 – rayryeng 2014-10-07 21:34:20

0

您打給figure兩次。第一個電話是不夠的,所以擺脫這種說法:

fig = figure('name', fileName); 

而且,擺脫了外來clf調用,因爲你的情節內容會在循環的每次迭代改變的,所以沒有必要清除在你放入東西之前的當前數字。我懷疑你的情節框架是在後臺,並且在你將這個框架寫入文件之前,它需要顯示爲當前焦點。因此,請嘗試將框架放在焦點上,然後致電writeVideo。換句話說,使用下面的修改代碼。任何地方,我已經改變,我已經置評:

index = (1:nSamples)/sampRate + startTimeSec; 

figure('name',fileName); 
title('Seismic'); 
plot(index,data,'r*'); 

writerObj = VideoWriter('c:\temp\movie.avi'); 
open(writerObj); 

%// Remove this 
% fig = figure('name',fileName); 
window = 200; %samples 
for i=1:nSamples 
    first = max([i-window/2,1]); 
    last = min([i+window/2,nSamples]); 
    %// Remove this as well 
    % clf; 
    figure(1); %// Put frame in focus 
    plot(index(first:last),data(first:last),'r*'); 
    %// Put title here 
    title('Seismic'); 

    %// Change. Just using getframe by default 
    %// will call the current frame in focus 
    writeVideo(writerObj,getframe); 
end 
close(writerObj); 
相關問題