Matlab中的电影被裁剪,并没有显示完整的数字

时间:2014-07-08 07:48:05

标签: matlab matlab-figure movies

我正在学习用Matlab制作电影。我从互联网上编写了这段代码来制作电影。我正在使用OS X Mavericks和Matlab 2013a。我通常把数字窗口停靠。当我运行代码时,我可以完美地看到动画。何时使用movie2aviVideoWriter命令保存电影。它不会以全帧图形录制电影。相反,我看到了一点图形窗口和我的Matlab桌面视图。任何人都可以帮我这个吗?

 clear; 
close all;

% Creates a 2D Mesh to plot surface
x=linspace(0,1,100);
[X,Y] = meshgrid(x,x);

N=100; % Number of frames
for i = 1:N
% Example of plot 
Z = sin(2*pi*(X-i/N)).*sin(2*pi*(Y-i/N));
surf(X,Y,Z)
% Store the frame   
M(i)=getframe(gca); % leaving gcf out crops the frame in the movie.


end 

% myVideo = VideoWriter('wavemotion.avi');
% open(myVideo);
% writeVideo(myVideo,M)
% close(myVideo)


% Output the movie as an avi file
%movie2avi(M,'WaveMovie.avi');

1 个答案:

答案 0 :(得分:0)

根据VideoWritermovie2avi的文档,您需要在代码中添加更多说明。

首先,您需要将渲染器设置为一个漂亮的显示器,并设置下一个绘图将仅重置子项而不是整个轴的轴:

set(gca,'nextplot','replacechildren');
set(gcf,'Renderer','zbuffer');

还有一个建议来预分配帧缓冲区:

M(N) = struct('cdata',[],'colormap',[]);

最后,您只需要在没有任何argmuent的情况下调用getframe,因为gca是默认参数。

在我的计算机上(使用Matlab 2013b),通过这些修改并使用VideoWriter,它可以正常工作。使用movie2avi时,它无法正常工作;我想我需要指定一个压缩编解码器来修复它。