随着时间的推移渲染阴谋作为窗口

问题描述:

我是一个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(图));

我在做什么错?

为什么你需要clf命令? getframe的文档读取“getframe返回一个电影帧,该帧是当前轴的快照。”你的clf命令摆脱了图中的轴,因此出现了错误。删除clf,它应该工作!

+0

我不认为这是问题所在。仔细阅读错误信息。它说框架必须**部分**在屏幕上。 – rayryeng 2014-10-07 21:34:20

您打给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);