我正在尝试从补丁中呈现视频。视频速度为25fps,我的代码将每个补丁渲染到屏幕上,然后再将其写入图像。我在补丁中尝试了“可见”,“关闭”选项,但这只会导致我的电影中出现空白帧。我可以使用补丁功能使其写入文件,但不会渲染到屏幕吗?
for k = 1:length(obj.shape)
fig = patch('Vertices', obj.shape(k).vertices',...
'Faces', obj.shape(k).faces', 'FaceColor', [0.8 0.5 0.2],...
'LineStyle', 'none', 'FaceLighting', 'phong', 'Visible', 'on');
light('Position', [1 0 0], 'Style', 'infinite');
View(180, 90);
f = getframe(gcf);
close(gcf);
imwrite(f.cdata, [directory '/frame_' int2str(k) '.jpg'], 'jpg');
end
答案 0 :(得分:2)
问题在于getframe() sets the figure to visible(您可以通过输入“编辑getframe ”,第100-125行来查看)。虽然我完全理解你的需要,但我不确定是否有任何直截了当的方式去做你所要求的事情。
答案 1 :(得分:1)
getframe
无法使用隐身的原因是它捕获了实际的屏幕内容。如果您愿意使用print
,则可以实现您想要的目标:
figure
set(gcf, 'Visible', 'off')
for ...
< draw your animation frame >
print('-r300', '-djpeg', '[directory '/frame_' int2str(k) '.jpg'])
end
缺点是您保存的图像在屏幕上看起来不太像,因为它是由Matlab的打印机制生成的。您可以通过指定分辨率,在“页面”等设置图形位置和大小等来调整其外观。
顺便说一句,为每个帧创建一个新的数字可能不是一个好主意,只需重用一个并覆盖其内容。此外,对于后处理成视频,动画gif等,最好使用像PNG这样的无损文件格式。