除了使用getframe
和saveas
将图形内容保存到光栅图像以进行进一步处理之外,还有其他选择吗?
方法1:getframe
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
content = frame2im(getframe(h));
这具有严重的缺点,即在调用
getframe()
时显示该图形以执行屏幕捕获,并且在循环中执行此类渲染时存在问题(即,在每次迭代时将content
保存为视频帧)。方法2:
saveas
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
saveas(h, '/path/to/file.png');
content = imread(/path/to/file.png');
这种方法的严重缺陷是写入磁盘,这在多线程应用程序中是有问题的,并且比直接呈现到内存要慢。由于
saveas()
显然会在调用PNG编码器之前呈现到内存中,因此我可以实现所需的功能,但是我在仅执行呈现部分的MATLAB文档中找不到任何功能。问题:
您是否知道将任意
axes
内容呈现到光栅图像的另一种方法? 最佳答案
如果使用avifile
创建一个avi文件,然后使用addframe
向其中添加框架,则MATLAB不会像getframe
那样打开额外的可见图形。
avi = avifile('/path/to/output');
figure_handle = figure('visible', 'off');
% ...
for something = 1:1000
cla
% (draw stuff...)
avi = addframe(avi, figure_handle);
end