我可以直接写一个matlab补丁文件

时间:2012-02-07 14:39:25

标签: matlab graphics matlab-figure

我正在尝试从补丁中呈现视频。视频速度为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

2 个答案:

答案 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这样的无损文件格式。