执行此操作的标准方法是在循环中更新您的绘图数据,并使用getframe 或类似函数来获取当前屏幕并将其保存到带有imwrite 或VideoWriter 的文件中。
改写
对于imwrite,重要的是,如果您想写入多帧数据(对于 TIFF 或 GIF),您需要使用 'WriteMode' 参数并将其设置为 'append',这样您只需添加图像的新框架。在第一次通过循环时,您不想要追加,因为这会追加到可能已经存在的现有图像。
获取帧
就getframe而言,它会抓取指定图形的屏幕截图并返回一个包含颜色图和RGB图像的结构体cdata。这是您要写入视频或多帧图像的内容。
视频作家
对于写入视频,您将使用行为稍有不同的VideoWriter 类。主要步骤是:
-
创建对象
vid = VideoWriter('filename.avi');
-
打开对象
vid.open() % or open(vid)
-
使用writeVideo写一些数据
vid.writeVideo(data)
-
关闭视频
vid.close()
然后,您可以根据需要多次调用writeVideo,每次都会添加一个额外的帧。
总结
这是一个将所有这些结合在一起并编写多帧 TIFF 和 AVI 的演示。
% Example data to plot
x = linspace(0, 2*pi, 100);
y = sin(x);
% Set up the graphics objects
fig = figure('Color', 'w');
hax = axes();
p = plot(NaN, NaN, 'r', 'Parent', hax, 'LineWidth', 2);
set(hax, 'xlim', [0, 2*pi], 'ylim', [-1 1], 'FontSize', 15, 'LineWidth', 2);
% Create a video object
vid = VideoWriter('video.avi')
vid.open()
% Place to store the tiff
tifname = 'image.tif';
for k = 1:numel(x)
set(p, 'XData', x(1:k), 'YData', y(1:k));
% Grab the current screen
imdata = getframe(fig);
% Save the screen grab to a multi-frame tiff (using append!)
if k > 1
imwrite(imdata.cdata, tifname, 'WriteMode', 'append')
else
imwrite(imdata.cdata, tifname);
end
% Also write to an AVI
vid.writeVideo(imdata.cdata);
end
% Close the video
vid.close()
结果(作为动画 GIF)