随着时间的推移渲染阴谋作为窗口
问题描述:
我是一个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,它应该工作!
答
您打给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);
我不认为这是问题所在。仔细阅读错误信息。它说框架必须**部分**在屏幕上。 – rayryeng 2014-10-07 21:34:20