2012-02-07 54 views
2

我试图从补丁渲染视频。视频是25fps,我的代码将每个补丁渲染到屏幕上,然后将其写入图像。我已经尝试了补丁中的“可见”,“关闭”选项,但这只会导致我的电影中出现空白帧。我可以使用补丁功能,以便写入文件,但不会渲染到屏幕上?我可以直接写一个matlab补丁到文件

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 

回答

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这样的无损文件格式会更好。

+0

是的,这是解决方案的默认附加优点是不显示绘图轴。 – shaw2thefloor 2015-01-13 15:37:31

2

的问题是,getframe() sets the figure to visible(你可以看到,通过键入 “编辑的getFrame”,行100-125)。我不确定是否有任何直接的方法来做你所要求的,但我完全理解你的需要。