我遇到了 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软件,但是没有任何运气。这是怎么回事?
答案 0 :(得分:0)
一种可能性是,在循环到getframe
的过程中,由于系统或用户活动等原因,焦点可能会更改为其他窗口。如果是这种情况,可以通过指定图形的句柄来避免问题或轴作为getframe
的输入:
hFig = figure(10); % return handle of the figure
... % other code
F(steg_nummer) = getframe(hFig); % provide handle as input