MATLAB R2015b中getframe的奇怪行为

时间:2018-08-05 11:13:14

标签: matlab opengl

我遇到了 getframe 函数的非常奇怪的行为。我实质上是在for循环中创建一个新框架,

figure(10)
image(xvekt*1e6,yvekt*1e6,I2/max(max(I2))*64)
hold on
plot(D_core/2*cos(linspace(0,2*pi,50))*1e6,D_core/2*sin(linspace(0,2*pi,50))*1e6,'Color',[1 1 1]*0.6,'LineWidth',2)
colormap(jet)
hold off
zoom(5)
drawnow
pause(.1)
F(steg_nummer) = getframe;

代码的确切作用不是很重要,但是请在getframe调用之前注意 pause(0.1),以确保 getframe 确实捕获了帧。 steg_nummer 是迭代变量。

在for循环之后,我尝试通过以下方式保存动画

v = VideoWriter('C:\newfile.avi');
open(v);
for k=1:length(F)
 k
 writeVideo(v,F(k))
end
close(v)

但这失败了。如上所述,我出于调试目的显示了k,看来 cdata 有时是一个0x0矩阵,这很奇怪。

for循环

for k=1:length(F)
  disp(size(F(k).cdata))
end

返回

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

>     0     0

>     0     0

>     0     0

>     0     0

>   344   436     3

writeVideo 当然在第一个0x0 cdata 矩阵处失败。我曾尝试在脚本开始时通过 opengl('software')切换到OpenGL软件,但是没有任何运气。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

一种可能性是,在循环到getframe的过程中,由于系统或用户活动等原因,焦点可能会更改为其他窗口。如果是这种情况,可以通过指定图形的句柄来避免问题或轴作为getframe的输入:

hFig = figure(10); % return handle of the figure
...  % other code
F(steg_nummer) = getframe(hFig); % provide handle as input